Jako przykład:q.js: czy mogę zatrzymać wykonywanie funkcji, dopóki nie spełni się obietnica?
if(foo) {
async_call(); // returns a Q promise object
}
// do this immediately if foo was false
// or after the promise is resolved if foo was true
Czy to w ogóle możliwe?
Alternatywy jakie widzę, to albo zawsze wywołanie funkcji asynchronicznej, wyrzucenie czeku "foo", który jest mniej optymalny, ale działałby w kodzie; lub po prostu zakładając, że "foo" jest prawdziwe i rzuca błąd, jeśli jest fałszywy (wymagający od osoby dzwoniącej, aby spróbował ponownie po wywołaniu funkcji asynchronicznej), która jest jeszcze mniej idealna z oczywistych powodów.
EDIT: jako tymczasowe obejście, znalazłem to działa, ale to prawie idealna:
var promise = foo ? Q.defer().resolve(foo).promise : async_call();
promise.then(function(foo) {
// this is done after the async call if it was necessary or immediately if not
});
Idealne, właśnie tego chciałem! Dzięki! –
Należy zauważyć, że formami kanonicznymi są 'Q (valueOrPromise) .then (onFulfilled)' lub 'Q.when (valueOrPromise, onPulfilled)'. Twoje też działa, ale jest mniej idiomatyczne :) – Domenic