我有一个Node.js应用程序,可能会调用多个函数,具体取决于几个因素,但在最后一次回调后只调用一个最后一个函数.
这是我得到的简化版本:
if(foo === bar){ function1(arg1,function(val1){ doWhatever(val1,function(){ res.end("Finished"); }); }); }else if(foo === baz){ function2(arg2,function(val2){ doWhatever(val2,function(){ res.end("Finished"); }); }); }else{ function3(arg3,function(val3){ doWhatever(val3,function(){ res.end("Finished"); }); }); }
这就是我正在做的事情:
var finished = false; if(foo === bar){ function1(arg1,function(val1){ result = val1; finished = true; }); }else if(foo === baz){ function2(arg2,function(val2){ result = val2; finished = true; }); }else{ function3(arg3,function(val3){ result = val3; finished = true; }); } var id = setInterval(function(){ if(finished === true){ clearInterval(id); doWhatever(result,function(){ res.end("Finished"); }); } },100);
我想这可以通过使用promises来简化,但是我不确定应该如何实现它们.
解决方法
你也可以使用
when和promises,恕我直言,这是最容易阅读.
var promises = []; if(x) { var deferred1 = when.defer(); doSomethingAsync({ callback: deferred1.resolve }); promises.push(deferred1.promise); } else if(y) { var deferred2 = when.defer(); doSomethingAsync({ callback: deferred2.resolve }); promises.push(deferred2.promise); } else if(z) { var deferred3 = when.defer(); doSomethingAsync({ callback: deferred3.resolve }); promises.push(deferred3.promise); } when.all(promises).then(function () { console.log('Finished Promises'); });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。