我是异步事物的新手。
我学习了如何使用回调,但是现在我需要使用两个函数(异步),并且只有在它们完成后才可以调用回调:
function bigFunction(data, callback) {
//only after they will finish ||
func1(); // <================||
func2(); // <================||
//call callback
callback();
}
实码:
function getStarsStatus(star, callback) {
require('./Bezeq').GetStarStatus(star, function(status) {
statuses['Bezeq'] = status;
});
require('./Hot').GetStarStatus(star, function(status){
statuses['Hot'] = status[0][0]['סטטוס'];
});
}
我可能不知道有一个非常简单的解决方案。
最佳答案
这最容易用Promises和Promise.all来完成,但是如果您的异步函数不返回Promises并且不想对它们进行Promisise,则还可以使用一个计数器,并在计数器达到期望的数字时调用回调:
function getStarsStatus(star, callback) {
const numStatusesTotal = 2;
let numStatusesFetched = 0;
require('./Bezeq').GetStarStatus(star, function(status) {
statuses['Bezeq'] = status;
if ( ++numStatusesFetched === numStatusesTotal )
callback( statuses );
});
require('./Hot').GetStarStatus(star, function(status){
statuses['Hot'] = status[0][0]['סטטוס'];
if ( ++numStatusesFetched === numStatusesTotal )
callback( statuses );
});
}