gpt4 book ai didi

javascript - 异步函数调用中的共享变量

转载 作者:行者123 更新时间:2023-12-03 12:31:09 25 4
gpt4 key购买 nike

是否有在 Javascript 中的两个异步函数之间共享变量的基本方法?我正在为 Parse.com 应用程序编写一个函数,该函数同时发送两个查询,第二个查询等待前者的结果。我一直在使用基本的共享 bool 值和忙等待循环,但是如果在循环开始之前未设置 bool 值,则循环不会终止(但如果之前设置了 bool 值,则循环不会终止,因此状态实际上是在两个回调之间共享)。这让我觉得我需要某种形式的“ volatile ”变量,但在 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 事件。

关于javascript - 异步函数调用中的共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23925419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com