【发布时间】:2016-04-11 06:58:21
【问题描述】:
上下文
我正在进行调用,如果成功,则将布尔值从 false 更改为 true。然后,在这个调用之外,我检查这个布尔值是否为真,如果是,我路由到另一个页面。
问题
控制台日志表明,在调用有时间更改布尔值之前,正在执行检查布尔值的 if 语句。我意识到这是因为异步性,但不确定正确的设计模式是什么。这是一个sn-p:
//set variables to check if the even and user get updated or if error
var eventUpdated = false;
Meteor.call('updateEvent', eventId, eventParams, function(error, result){
if(error){
toastr.error(error.reason)
} else {
var venueId = result;
toastr.success('Event Info Updated');
eventUpdated = true;
console.log(eventUpdated)
}
});
console.log(eventUpdated)
if (eventUpdated) {
Router.go('/get-started/confirmation');
}
可能的解决方案
我猜我需要一种方法来阻止 if 语句被执行,直到回调返回一个值。根据谷歌搜索,我认为这与this 有关,但不太清楚如何实际使用它。
【问题讨论】:
-
有什么原因不能将 Meteor.call('updateEvent') 回调之外的代码块移动到回调中?你可以使用类似 wrapAsync 的东西,或者使用下面建议的会话变量,但为什么不把它放到回调中呢?
-
其实有...原因是我其实有三个回调函数,
if语句检查三个是否都是真的。
标签: javascript node.js asynchronous meteor callback