【发布时间】:2015-09-28 05:16:09
【问题描述】:
当我投入研究Promises 时,我对以下我没有发现讨论的问题的理解已经停止(我发现的只是Promise 构造函数和Promise 'then 的具体讨论' 功能 - 但不是比较它们的设计模式的讨论)。
1. Promise 构造函数
From the MDN documentation,我们使用了 Promise 构造函数(添加了我的评论):
new Promise(function(resolve, reject) { ... }); // <-- Call this Stage 1
具有两个参数
resolve和reject的函数对象。首先 参数实现了承诺,第二个参数拒绝了它。我们可以 一旦我们的操作完成,调用这些函数。
2。 then 函数
转到可以在 Promise 对象上调用的 then 函数(它返回一个新的 Promise 对象),我们有 the following function signature as described by the documentation(添加了我的 cmets) :
p.then(onFulfilled, onRejected);
链接
因为
then方法返回一个Promise,你可以很容易地链接然后 来电。
var p2 = new Promise(function(resolve, reject) {
resolve(1); // <-- Stage 1 again
});
p2.then(function(value) {
console.log(value); // 1
return value + 1; // <-- Call this Stage 2
}).then(function(value) {
console.log(value); // 2
});
我的问题
从上面的代码 sn-p 中,我似乎很清楚 在第 1 阶段传递给 resolve 函数的值(在第二次出现 resolve - 下面 (2) , 上面) 被传递到下一个阶段(第一个 then 函数在相同的代码 sn-p 之后)。 在第 1 阶段没有返回值。但是,在第 2 阶段的返回值被传递到之后的下一个阶段(第二个then 函数)。
在用于创建Promise 的设计模式与在现有承诺上使用then 函数(也返回Promise)之间是否缺乏对应关系,只是历史上的侥幸(一个需要调用回调但不返回任何内容,另一个返回值但不调用回调)?
或者我是否遗漏了 Promise 构造函数使用与 then 函数不同的设计模式的根本原因?
【问题讨论】:
-
感谢您提出这个问题。它也困扰着我:Promise 构造函数和
then方法看起来很相似......它们如何比较和对比? -
感谢您提出这个问题,这是一个非常基本的概念,它不应该需要任何心理体操来理解
标签: javascript promise ecmascript-6 es6-promise