现在使用Asana Node库的Bluebird承诺?

时间:2015-03-08 23:37:11

标签: bluebird asana

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

  

var sections = [   '预生产&#39 ;,   '生产&#39 ;,   '后期制作&#39 ;,   '音频&#39 ;,   '运动&#39 ;,   '最终'   ]。   sections.forEach(的buildSection);

我最终必须将一系列.then()调用串联在一起,每个部分一个,以便按正确的顺序构建它们。这显然是一种更好的方式,但我是承诺和蓝鸟的新手。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

请参阅Bluebird的Promise.reduce(),对数据来自数组的一系列操作进行排序。

假设buildSection()在完成后返回一个promise并将section name作为参数,你可以这样做:

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
});

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