现在将Bluebird承诺与Asana节点库一起使用



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

变量部分 = [ "预生产", "生产", "后期制作", "音频", "运动", "决赛" ]; section.forEach(buildSection);

我最终不得不将一系列 .then() 调用串在一起,每个部分一个,以便以正确的顺序构建它们。显然有更好的方法,但我对承诺和蓝鸟很陌生。感谢您的任何帮助!

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

假设 buildSection() 在完成后返回一个 promise 并将节名作为其参数,您可以这样做:

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()支持像Array.prototype.reduce()这样的累积value。 如果不需要,还可以使用 Promise.each()Promise.map()(并发性设置为 1),具体取决于可能需要的最终输出类型。

最新更新