then()是否真的在所有情况下都返回了承诺?

时间:2020-01-26 17:42:55

标签: javascript promise

我的理解是,then() Promise方法本身总是返回一个Promise。承诺是我仍然习惯于适应新事物的东西,因此我只是研究了一些示例并进行了修补。下面的示例说明then方法的返回值是一个对象。

const foo = true;

const myPromise = new Promise((resolve, reject) => {
    setTimeout(() => {
        if (foo) {
            resolve('Do this');
        } else {
            reject(Error("Do that"));
        }
    }, 1500)
})

const bar = myPromise.then(value => value);

console.log(typeof bar); // object

这与兑现诺言一样吗?还是我需要显式地告诉then返回这样的承诺(伪代码,我知道不正确):

.then(value => {
    // do something 
    return new Promise;
})

我想确保我已经知道了。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

是的,then()方法返回一个Promise。它最多包含两个参数:Promise成功和失败案例的回调函数。

promise是一个对象,promise的类型将是object。您不需要显式地返回承诺。

您可以详细了解promises here

答案 1 :(得分:0)

是的then()总是返回诺言。但是,伪代码不正确。函数then带有两个参数:

p.then(onFulfilled[, onRejected]);

p.then(value => {
  // fulfillment
}, reason => {
  // rejection
});

Promise构造函数完全一样。 Then建立另一个承诺。我们经常忽略onRejected参数,因为我们用catch处理拒绝情况。

这里有一篇有趣的文章:https://medium.com/@kevinyckim33/what-are-promises-in-javascript-f1a5fc5b34bf

还有then文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then