gpt4 book ai didi

javascript - Azure Javascript - 等待函数完成

转载 作者:行者123 更新时间:2023-12-03 08:44:07 26 4
gpt4 key购买 nike

我正在使用 Azure 移动服务并运行 JavaScript 后端。然而,由于后端位于node.js中,所以一切都是异步执行的,我不知道如何停止函数的执行。

如果过去 24 小时内没有评论,我将尝试删除俱乐部,这是我的代码:

var clubs = tables.getTable('Club');
clubs.read(
{
success: function(club){
var now = new Date().getTime();
for(var i=0;i<club.length;i++){
var deleteClub = true;
comments.where({ClubId: club[i].id}).read(
{
success:function(comment){
var timeDiff = (now-comment[i].Time.getTime())/(1000*60*60);
console.log("Comment in table: "+timeDiff);
if(timeDiff<24){
deleteClub=false;
}

}
}
);
if(deleteClub){
console.log("deleting club: "+club[i].Title);
//clubs.del(club[i]);
}else{
console.log("saving club: "+club[i].Title);
}
}
}
}
);

if 语句在删除俱乐部变量更新之前执行,因此它始终为 true,但我需要将 if 语句的执行延迟到所有注释都已循环完毕之后。

最佳答案

由于您获得的回调是异步的,因此您无法在 where 调用之后在同步代码中使用您在该回调中获得的任何信息。

由于我们想要逐个俱乐部地处理事情,因此首先我们会将俱乐部的处理移至其自己的函数中。这避免了当我们从 read 获取回调时,i 已经递增的问题。

您的代码似乎假设 success 被重复调用,每个评论一次。我认为情况不太可能是这样,更有可能的是它被称为一次,并带有匹配评论的列表/数组。

如果是这样,那么将俱乐部处理拆分为自己的函数,然后循环找到的注释应该可以做到这一点:

var clubs = tables.getTable('Club');
clubs.read(
{
success: function(allClubs){ // <== Note plural
var now = new Date().getTime();
for (var i = 0; i < allClubs.length; i++) {
handler(now, allClubs[i]); // <== Move handling off to a handler
}
}
}
);
function handler(now, club) { // <== Unlike `i` above, `club` won't change because it's
// a function argument that we never assign to
comments.where({ClubId: club.id}).read(
{
success: function(comments){ // <== Note the plural
var deleteClub = true;
for (var i = 0; i < comments.length; ++i) {
var timeDiff = (now-comments[index].Time.getTime())/(1000*60*60);
console.log("Comment in table: "+timeDiff);
if(timeDiff<24){
deleteClub=false;
}
}
if (deleteClub){
console.log("deleting club: "+club.Title);
//clubs.del(club);
}else{
console.log("saving club: "+club.Title);
}
}
}
);
}

关于javascript - Azure Javascript - 等待函数完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32962703/

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