Мой вопрос немного касается концепции.
Много раз возникает такая ситуация:
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 на бэкэнд), но не могу найти что-то.
Кто-нибудь сталкивался с этим раньше и может помочь мне понять это?
Спасибо!
С promises у вас будет аналогичный шаблон, как и с обратным вызовом, только сначала вы сохраните результат и не будете дважды/дважды обращать обратный вызов:
function after(result) {
// Continue with the rest of code..
var a = 5;
}
var promise;
if (something){
promise = someAsyncAction();
} else {
promise = Promise.resolve(someSyncAction());
}
promise.then(after);
Или, короче говоря, вы бы использовали условный оператор и структурировали его гораздо проще:
(something
? someAsyncAction()
: Promise.resolve(someSyncAction())
).then(function(result) {
// Continue with the rest of code..
var a = 5;
});
yield
будет широко поддерживаться, result = something? yield someAsyncAction() : someSyncAction()
будет возможно до тех пор, пока он вызывается в контексте управляемого генератора.
yeld
ключевое слово yeld
иметь то же значение, что и в python, где используется для создания генераторов?