node.js中的promise回调的写法问题
高洛峰
高洛峰 2016-11-12 09:15:46
0
2
679

请教正确的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);
};


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

reply all(2)
学霸

对比一下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

三叔

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

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template