var _ = require('underscore');

var arr = [1,2,3,4,5];
var startPromise = new AV.Promise(function(resolve, reject) {
    resolve(1000);
});

var chainPromise = startPromise;

var startDate = Date.now();
_.each(arr, function (val) {
    chainPromise = chainPromise.then(function(ret) {
        console.log("No." + val + ", " + ret);
        return startPromise;
    });
});
var timeSpan = new Date() - startDate;
console.log("Finished , " + timeSpan + "ms");

如上述代码所示,我在云引擎函数里执行的结果是:

但我期望的结果是:

No.1
No.2
No.3
No.4
No.5
Finished

请教高手,如何修改我的代码以输出期望的结果?

你好,如果执行很快,日志顺序可能会有混乱的现象,我们的日志目前是并发写入。

其次,你这里 finish 的打印,应该放到最后的 chainPromise 的 then 方法里去,保证是最后执行。
最后,想正确跑这段代码,你可能需要在本地 node 环境测试下,避免日志并发写入的问题。

1 人赞了这个帖子.