suchen

Heim  >  Fragen und Antworten  >  Hauptteil

express - node.js中的promise回调的写法问题

请教正确的promise用法!!!

下面是错误的写法 最后没有return的结果就是 调用这个API函数拿不到promise

const apiFunction = () => {
    return Promise.resolve()
            .then(() => (demoResolve()))
            .then(() => (demoReject()))
    
            .then((data) => {
                // bug
                Promise.resolve(data);
            })
            .catch((err) => {
                // bug
                Promise.reject(err);
            });
};        

改进后下面这个promise方法能够如预期的拿到promise的值

const apiFunction = () => {
    return Promise.resolve()
            .then(() => (doResolve()))
            .then(() => (doReject()))
            // okay √
            .then((data) => Promise.resolve(data))
            // okay √
            .catch((err) => Promise.reject(err));
};
    

之后又尝试了一种写法,感觉这种写法和第一种写法没有什么区别,但是这样也写也是可以得到正确结果的。
请问这是什么情况呢?
这样写有错误吗?

const apiFunction = () => {
    return Promise.resolve()
            .then(() => (doResolve()))
            .then(() => (doReject()))
            .then(Promise.resolve)
            .catch(Promise.reject);
};

是不是等价于这种写法

const apiFunction = () => {
    return Promise.resolve()
            .then(() => (doResolve()))
            .then(() => (doReject()))
            .then(result)
            .catch(err);
};
PHPzPHPz2768 Tage vor628

Antworte allen(3)Ich werde antworten

  • 迷茫

    迷茫2017-04-17 15:27:08

    1.对比一下ES6 =》 ES5后,第一种很第二种写法的区别,主要是promise是否return

    //----------------case 1-------------------------------
    var apiFunction = function apiFunction() {
        return Promise.resolve().then(function () {
            return demoResolve();
        }).then(function () {
            return demoReject();
        }).then(function (data) {
            // bug
            AL.Promise.resolve(data);
        }).catch(function (err) {
            // bug
            AL.Promise.reject(err);
        });
    };
    
    //---------------------------case2--------------------------------
    var apiFunction2 = function apiFunction2() {
        return Promise.resolve().then(function () {
            return doResolve();
        }).then(function () {
            return doReject();
        })
        // okay √
        .then(function (data) {
            return Promise.resolve(data);
        })
        // okay √
        .catch(function (err) {
            return Promise.reject(err);
        });
    };
    
    

    第三种和第一种的区别也是是否return

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:27:08

    第一个写法的AL.哪儿来的

    更新一下。

    卧槽,当时看到这个提问,题主确实写错了,我就问了一下。后来再次进来看到其他答案都说了正确答案了,就没管,今天还被人踩了一下。真心觉得委屈啊。


    好吧,再跟一遍答案。

    promise的then中是要return的,用于生成一个新的promise给后面使用。

    匿名的箭头函数一个表达式的时候,默认就是return 它的。

    直接.then(Promise.resolve)写的时候是相当于给then传进去了Promise.resolve这个方法作为回调,当然也是正确的。

    .then(result)这种写法,我不知道result这个是啥,题里面没说!

    总之,then最后要return,用于生成新的promise给后面的链式调用。

    Antwort
    0
  • 阿神

    阿神2017-04-17 15:27:08

    你的第一种写法也也不是彻底错误的,只是你没有把 then 里新的 Promise 对象返回罢了。

    Antwort
    0
  • StornierenAntwort