我已经开发了几年的JavaScript,我根本不理解有关承诺的大惊小怪.
似乎我所做的只是改变:
api(function(result){
api2(function(result2){
api3(function(result3){
// do work
});
});
});
Run Code Online (Sandbox Code Playgroud)
无论如何,我可以使用像async这样的库,例如:
api().then(function(result){
api2().then(function(result2){
api3().then(function(result3){
// do work
});
});
});
Run Code Online (Sandbox Code Playgroud)
哪个代码更多,可读性更低.我没有在这里获得任何东西,它也不会突然神奇地"平坦".更不用说必须将事物转换为承诺.
那么,这里的承诺有什么大惊小怪?
当我开始研究Promises时,我的理解已经停止在我未发现的下面的问题上(我发现所有这些都是对Promise构造函数的具体讨论,以及Promise' then'函数 - 但不是一个比较它们的设计模式的讨论).
1. Promise构造函数
从MDN文档中,我们使用了Promise构造函数(添加了我的注释):
new Promise(function(resolve, reject) { ... }); // <-- Call this Stage 1
Run Code Online (Sandbox Code Playgroud)
带有两个参数的函数对象
resolve和reject.第一个参数履行承诺,第二个参数拒绝承诺.一旦我们的操作完成,我们可以调用这些函数.
2. then功能
移动到then功能,可以在一个被称为Promise对象(返回一个新的Promise对象),我们有由文档中描述的以下函数签名(加上我的意见):
p.then(onFulfilled, onRejected);
Run Code Online (Sandbox Code Playgroud)
链接
因为该
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 …Run Code Online (Sandbox Code Playgroud) 我对被抛出的不同术语感到困惑.根据我的理解,承诺可以是:
fulfilled
rejected
pending
settled
resolved
defer
Run Code Online (Sandbox Code Playgroud)
解决意味着解决了吗?还是意味着它实现了?什么是推迟的?