Car*_*arr 1 javascript node.js promise
我正在学习将我的 Node.js 代码风格从回调转换为承诺,这似乎是一种趋势,并且有很多优点。为了防止误解承诺的要点和好处,我正在阅读 MDN 上的文档。我可以理解此页面中的示例,但我不清楚文档开头提到的注释:
注意:...如果第一个参数被省略或提供了一个非函数,则创建的新 Promise 只会采用随后被调用的 Promise 的履行状态(如果它已履行)。如果第二个参数被省略或提供了一个非函数,则创建的新 Promise 只会采用随后被调用的 Promise 的拒绝状态(如果它被拒绝)。
如果这是微不足道的,请提前抱歉。希望能举例说明,谢谢。
该.then
方法调用两个函数之一,这取决于它所附加的 Promise 是否已完成或被拒绝。然后它根据该调用的结果返回一个新的 Promise。这允许您根据 Promise 是否成功运行不同的逻辑,并且可以轻松地将 Promise 链接在一起。
但是,如果您决定不传入其中一个函数,它会使用合理的默认值 - 这就是您发布的注释所暗示的。不过,演示可能比描述容易得多!
如果您省略onRejected
回调,如下所示:
myPromise.then(function (value) {
console.log("success!");
});
Run Code Online (Sandbox Code Playgroud)
结果与这样做相同:
myPromise.then(function (value) {
console.log("success!");
}, function (reason) {
throw reason;
});
Run Code Online (Sandbox Code Playgroud)
如果您省略onFulfilled
回调,如下所示:
myPromise.then(null, function (reason) {
console.log("fail!");
});
Run Code Online (Sandbox Code Playgroud)
结果是一样的:
myPromise.then(function (value) {
return value; // the same as returning Promise.resolve(value)
}, function (reason) {
console.log("fail!");
});
Run Code Online (Sandbox Code Playgroud)
如果您将两者都排除在外……这基本上毫无意义,但仍然:
myPromise.then();
Run Code Online (Sandbox Code Playgroud)
这实际上与以下内容相同:
myPromise.then(function (value) {
return value;
}, function (reason) {
throw reason;
});
Run Code Online (Sandbox Code Playgroud)
反过来,基本上只是:
myPromise
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
354 次 |
最近记录: |