我不认为这可以保证调用logger.log(res)的顺序;
实际上,确实如此。该语句在
resolve调用之前执行。
有什么建议?
很多。最重要的是您使用手动创建承诺反模式 仅做
promiseWhile(…, function() { return db.getUser(email) .then(function(res) { logger.log(res); count++; });})…
第二,该
while功能可以简化很多:
var promiseWhile = Promise.method(function(condition, action) { if (!condition()) return; return action().then(promiseWhile.bind(null, condition, action));});
第三,我不会使用
while循环(带有闭包变量),而是使用
for循环:
var promiseFor = Promise.method(function(condition, action, value) { if (!condition(value)) return value; return action(value).then(promiseFor.bind(null, condition, action));});promiseFor(function(count) { return count < 10;}, function(count) { return db.getUser(email) .then(function(res) { logger.log(res); return ++count; });}, 0).then(console.log.bind(console, 'all done'));
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)