Azure Javascript -等待函数完成
Azure Javascript - Wait for Function Completion
我正在使用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语句在delete club变量更新之前执行,所以它总是为真,但是我需要将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);
}
}
}
);
}
相关文章:
- 如何在jqGrid中使saveRow函数等待editRow函数
- 让 JavaScript 函数等待 Jquery 对话框模态的结果
- 如何在函数完成后使用 jQuery 进行动画处理 - 让第二个函数等待
- 如何使函数等待回调完成
- 让jquery函数等待它'的上一个呼叫已解决
- Javascript/jQuery使函数等待回调后再继续
- 让一个函数等待另一个变量
- 如何强制异步函数等待,直到完成
- 使函数等待/暂停;直到另一个结束
- 需要函数等待事件处理程序完成后再执行下一个函数
- Javascript函数等待另一个函数完成
- Javascript:让函数等待查询完成
- 我需要把'return'casper.then'块,让父函数等待子函数完成执行
- 使函数等待直到元素存在
- 美元.Ajax成功函数等待
- 如何让我的javascript函数等待html元素渲染
- 如何强制函数等待某个事件发生
- javascript/jquery:迭代调用函数;等待之前的通话结束
- 如何让JS函数等待执行
- 如何让NodeJs函数等待