是否有一种基本方法可以在JavaScript中的两个异步函数之间共享变量?我正在为Parse.com应用程序编写一个函数,该功能同时发送了两个查询,第二个问题等待着前者的结果。我一直在使用基本的共享布尔值和繁忙的等待环路,但是如果未在循环开始之前设置布尔值,则循环不会终止(但是如果以前设置了布尔值,因此实际上是在两个回调中共享状态)。这使我认为我需要某种形式的“挥发性”变量,但似乎并不存在于JavaScript中,因为它实际上并没有像这样的线程功能/优化。如果有帮助,我添加了一些缩写的代码,以帮助解释我在做什么:
var firstQueryDone = false;
var firstResultsError = false;
var foundUser;
var foundFollowers;
...
[put some constraints on the query]
...
followersQuery.first({
success: function(followers) {
....
firstQueryDone = true;
},
error: function(error) {
firstResultsError = true;
response.error(error);
}
});
.....
[constraints on new query]
.....
commentsQuery.find({
success: function(comments) {
while(!firstQueryDone && !firstResultsError);
if(!firstResultsError) {
.....
} else {
......
}
},
error: function(error) {
response.error(error);
}
});
var fComplete = false,
sComplete = false,
didError = false;
#.first(
success: function () {
fComplete = true;
checkMethod();
},
error: function() {
fComplete = true;
didError = true;
checkMethod();
}
);
#.second(
success: function() {
sComplete = true;
checkMethod();
},
error: function() {
sComplete = true;
didError = true;
checkMethod();
}
);
function checkMethod() {
if(fComplete && sComplete) {
if(didError) {
//Handle error
} else {
//Do success here
}
}
}
这种方式,您没有一个等待循环涉足一些资源,而您只有状态更改和OnStateChange事件。
var firstQueryStatus = {
qryDone: false,
qryError: false
};
在启动每个任务时向计数器进行柜台,如果完成的话,如果完成的某个时间点已经完成,则降低了,其余的是一半的任务完成,而其余的则在等待启动。
taskCnt += 1
task1()
taskCnt += 1
task2()
在某个点
task1()
task2()
将假设所有任务都已完成。
在这种情况下,额外的var
closeFnc(taskCnt)
可以帮助。
其他解决方案将是开始进行投票。