相关疑难解决方法(0)

承诺不仅仅是回调吗?

我已经开发了几年的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)

哪个代码更多,可读性更低.我没有在这里获得任何东西,它也不会突然神奇地"平坦".更不用说必须将事物转换为承诺.

那么,这里的承诺有什么大惊小怪?

javascript callback promise q bluebird

402
推荐指数
7
解决办法
9万
查看次数

为什么Promise构造函数需要一个在完成时调用'resolve'的函数,但'then'却没有 - 它返回一个值而不是?

当我开始研究Promises时,我的理解已经停止在我未发现的下面的问题上(我发现所有这些都是对Promise构造函数的具体讨论,以及Promise' then'函数 - 但不是一个比较它们的设计模式的讨论).


1. Promise构造函数

从MDN文档中,我们使用了Promise构造函数(添加了我的注释):

new Promise(function(resolve, reject) { ... }); // <-- Call this Stage 1
Run Code Online (Sandbox Code Playgroud)

带有两个参数的函数对象resolvereject.第一个参数履行承诺,第二个参数拒绝承诺.一旦我们的操作完成,我们可以调用这些函数.


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)

javascript promise ecmascript-6 es6-promise

34
推荐指数
4
解决办法
1万
查看次数

什么是javascript承诺的正确术语

我对被抛出的不同术语感到困惑.根据我的理解,承诺可以是:

fulfilled
rejected
pending 
settled
resolved
defer
Run Code Online (Sandbox Code Playgroud)

解决意味着解决了吗?还是意味着它实现了?什么是推迟的?

javascript promise

17
推荐指数
2
解决办法
2746
查看次数

标签 统计

javascript ×3

promise ×3

bluebird ×1

callback ×1

ecmascript-6 ×1

es6-promise ×1

q ×1