【发布时间】:2015-06-30 09:23:14
【问题描述】:
我的问题有点关于概念。
很多时候都有这样的情况:
if(something){
someAsyncAction();
}else{
someSyncAction();
}
// Continue with the rest of code..
var a = 5;
这种情况的问题很明显,我不希望调用var a = 5,除非someAsyncAction() 或someSyncAction() 现在可以完成,因为soAsyncAction() 是异步的唯一方法(我认为of) 来解决这种情况是这样的:
var after = function(){
// Continue with the rest of code..
var a = 5;
}
if(something){
someAsyncAction(after);
}else{
someSyncAction();
after ();
}
但是,这段代码很丑陋,难以阅读,而且看起来像是反模式和有问题的。
我想也许我可以通过 Promises(在后端使用 Bluebird)找到一些解决方案,但找不到。
有没有人遇到过这个问题并且可以帮助我解决这个问题?
谢谢!
【问题讨论】:
-
混乱的 AsyncAction 和 SyncAction 在我看来也是反模式。
-
如果你愿意,可能会很丑,但它是定义和使用 javascript 回调的方式。我不知道任何其他异步工作的方式。哦,这根本不是反模式,这就是模式。
-
@xdazz。 Async and Sync 很流行,例如:
if(!modelAlreadyExist) loadItAsyncFromDb() else useTheCurrentOneSync() -
@bolza,你可以用 JavaScript 做某事并不意味着它没问题,就像其他所有语言一样,JavaScript(和其他异步语言)的问题,很多人在没有它的情况下编写它非常难看以后有机会调试它..这就是为什么模式在这里如此重要..见下面Bergi的回答,就是这样!
-
这是一个非常相关的问题/答案,可能重复:Return value from asynchronous OR synchronous JavaScript request。
标签: javascript design-patterns asynchronous promise anti-patterns