我需要等待两个API回调函数的任务,当任务完成时,我希望收到一个回调,这样我就可以使用这两个函数的数据了。
我希望这个函数能够并行执行...我读了很多关于async.parallel的问题,但我找不到一种方法来使用async这些函数。
当然,异步只是一个例子,如果有效,任何其他方式都可以。
对不起我的英语不好,我希望代码更容易理解。
谢谢
var dataFunctionA = "";
var dataFunctionB = "";
var callbackFunctionA = function(err, response, data) {
// do some work with data
dataFunctionA = "Hello";
}
var callbackFunctionB = function(err, response, data) {
// do some work with data
dataFunctionB = " World!";
}
function printHelloWorld(){
console.write(dataFunctionA + dataFunctionB);
}
APIClient.functionA(paramA, callbackFunctionA);
APIClient.functionB(paramB, callbackFunctionB);
// need to wait for the two callbacks
printHelloWorld();

答案 0 :(得分:1)
如果您不想使用承诺,可以执行以下操作:
var dataFunctionA = "";
var dataFunctionB = "";
var dataFunctionCount = 2;
function checkDone() {
dataFunctionCount--;
if(dataFunctionCount === 0) {
// need to wait for the two callbacks
printHelloWorld();
}
}
var callbackFunctionA = function(err, response, data) {
// do some work with data
dataFunctionA = "Hello";
checkDone();
}
var callbackFunctionB = function(err, response, data) {
// do some work with data
dataFunctionB = " World!";
checkDone();
}
function printHelloWorld(){
console.write(dataFunctionA + dataFunctionB);
}
APIClient.functionA(paramA, callbackFunctionA);
APIClient.functionB(paramB, callbackFunctionB);

答案 1 :(得分:0)
使用function draw(){
clear();
//draw characters
drawCharacter(window.character[0]['imageObject'],window.character[0]['imageObject']['x'],window.character[0]['imageObject']['y'],window.character[0]['imageObject']['w'],window.character[0]['imageObject']['h']);
window.character[0]['imageObject']['x'] += 10;
console.log(window.character[0]['imageObject']['x']); //returning 0 every time, not incrementing the way I expected it to.
}
,您可以通过以下方式实现:
async.parallel
在你的函数中,在完成数据处理之后你应该调用传递的隐式并行回调。
async.parallel({
functionA: APIClient.functionA.bind(null, paramA),
functionB: APIClient.functionB.bind(null, paramB)
}, function(error, results) {
processCallbacks(error, results);
});
你在这里做的是将函数对象传递给并行函数。此处使用对象的键,以便您可以访问结果数组。对于上面的示例,functionA(paramA, callback) {
// data processing
callback(null, resultFromProcessingParamA);
}
的结果将保存在functionA
中,依此类推。
第一个参数为null(由于.bind),然后传递所有其他所需的参数。回调由函数之间的results.functionA
自动传递,最后一个回调仅在所有函数完成时调用。
请运行以下代码段以便更好地理解。
parallel

function functionA (paramA, callback) {
$('body').append('<p> Parallel execution of function A and waiting for 5 seconds, parameter passed: ' + paramA + '</p>');
setTimeout(function(){
$('body').append('<p>processed functionA</p>');
callback(null, ++paramA);
}, 5000);
}
function functionB (paramB, callback) {
$('body').append('<p> Parallel execution of function B and waiting for 1 second, parameter passed: ' + paramB + '</p>');
setTimeout(function(){
$('body').append('<p>processed functionB</p>');
callback(null, ++paramB);
}, 1000);
}
function processCallbacks (results) {
$('body').append('<p> Processing results from two functions. ParamA now is:' + results.functionA + ' and paramB now is:' + results.functionB + '</p>');
}
async.parallel({
functionA: functionA.bind(null, 10),
functionB: functionB.bind(null, 2)
}, function(error, results) {
console.log(results);
if (!error) {
processCallbacks(results);
}
});
&#13;