考虑以下javascript代码段 -
var x;
asyncFunction();
syncFunction();
function syncFunction() {
console.log(x);
}
function asyncFunction() {
// any async call or an ajax call
//setTimeout(function () {
// x = 5;
//}, 1000);
}
x变量的值未定义,因为异步函数需要一些时间才能执行。假设我没有自由使用Promise / deferreds,pub-sub而且,我不应该改变上面片段中异步和同步调用的执行顺序,我怎样才能实现正确的值x正确记录?这是最近向我询问的一个面试问题。
答案 0 :(得分:2)
异步函数应该在异步函数完成时调用任何意思 - 回调函数。
var x;
asyncFunction(syncFunction); // Pass the function as a callback
function syncFunction() {
console.log(x);
}
function asyncFunction(callback) {
// using your example
setTimeout(function () {
x = 5;
callback();
}, 1000);
}