我想用来$q.when()
包装一些非承诺回调。但是,我不知道如何从回调中解决承诺。我在匿名函数中做什么来强制$q.when()
解决我的原因?
promises = $q.when(
notAPromise(
// this resolves the promise, but does not pass the return value vvv
function success(res) { return "Special reason"; },
function failure(res) { return $q.reject('failure'); }
)
);
promises.then(
// I want success == "Special reason" from ^^^
function(success){ console.log("Success: " + success); },
function(failure){ console.log("I can reject easily enough"); }
);
我要复制的功能是这样的:
promises = function(){
var deferred = $q.defer();
notAPromise(
function success(res) { deferred.resolve("Special reason"); },
function failure(res) { deferred.reject('failure'); }
);
return deferred.promise;
};
promises.then(
// success == "Special reason"
function(success){ console.log("Success: " + success); },
function(failure){ console.log("I can reject easily enough"); }
);
这很好,但when()
看起来很好。我只是无法将解决消息传递给then()
.
更新
有更好、更强大的方法来做到这一点。$q
同步抛出异常,正如@Benjamin 指出的那样,主要的 Promise 库正朝着使用完整 Promises 代替 Deferreds 的方向发展。
也就是说,这个问题正在寻找一种使用$q
'swhen()
函数的方法。当然欢迎客观上优越的技术,但不要回答这个具体问题。