扁平化 javascript 中的 Promise

Posted

技术标签:

【中文标题】扁平化 javascript 中的 Promise【英文标题】:Flattening promises in javascript 【发布时间】:2015-09-15 05:32:19 【问题描述】:

bluebird 库似乎自动将Promise::then 用作 promise 上的“map”和“flatMap”的等价物,例如,请参阅此示例。

var Promise;

Promise = require('bluebird').Promise;

Promise.resolve(1).then(function(x) 
  return Promise.resolve(x + 1);
).then(function(x) 
  return console.log(x); // => `2` (not a promise)
);

Promise.resolve(1).then(function(x) 
  return x + 1;
).then(function(x) 
  return console.log(x); // => `2`
);

Promise.reject('hi').catch(function(x) 
  return Promise.reject('hi2');
).catch(function(x) 
  return console.error(x); //  => `hi2` (not a promise)
);

这是 es6 Promise API 的合约吗?例如,我没有看到提到这种扁平化行为 here 或 here。

【问题讨论】:

呃,那些文档非常稀疏。 MSDN 甚至没有提到 then 返回一个承诺:-/ 【参考方案1】:

这是 es6 Promise API 的合约吗?

是的,它是由Promises/A+ 建立的合约,并已从那里进入 ES6 规范。你会发现一些讨论here、here 和here。

【讨论】:

以上是关于扁平化 javascript 中的 Promise的主要内容,如果未能解决你的问题,请参考以下文章

ES6 promise

进阶学习7:JavaScript异步编程——Generator异步方案Async/ Await

如何在没有“缩进金字塔”的情况下正确表达任意 Promise 链? [复制]

自定义实现JavaScript中的Promise

自定义实现JavaScript中的Promise

JavaScript中的Promise