现在要将 Bluebird promises 与 Asana Node 库一起使用?

Now to use Bluebird promises with Asana Node library?

我正在使用 Asana Node 库创建一个新项目,其中包含项目中的一系列部分(任务)。我需要以特定顺序(同步)创建这些部分,以便它们以正确的顺序出现在项目中。如果我只获取部分名称数组,然后使用 forEach 将它们添加为任务,它们不会以正确的顺序出现(因为这些是异步调用)。这是一个片段:

var sections = [ 'Pre-Production', 'Production', 'Post-Production', 'Audio', 'Motion', 'Final' ]; sections.forEach(buildSection);

我最终不得不将一系列 .then() 调用串在一起,每个部分一个,以便按照正确的顺序构建它们。显然有更好的方法,但我是 promises 和 bluebird 的新手。感谢您的帮助!

请参阅 Bluebird 的 Promise.reduce() 以了解数据来自数组的一系列操作的排序。

假设 buildSection() returns 完成时的承诺,并将部分名称作为其参数,您可以这样做:

var sections = [ 'Pre-Production', 'Production', 'Post-Production', 'Audio', 'Motion', 'Final' ]; 
Promise.reduce(sections, function(val, item) {
    return buildSection(item);
}, 0).then(function(finalVal) {
    // all are done here
});

Bluebird 的 Promise.reduce() 支持累计 value 点赞 Array.prototype.reduce()。如果不需要,也可以使用 Promise.each()Promise.map()(并发设置为 1),具体取决于您可能需要的最终输出类型。