要处理我返回的承诺,并将其与.then()
链接起来。但是,我必须使用第三方库来进行回调并且不会返回承诺。
为清楚起见,这是一个假的例子:
person.sayHello()
.then( response => introduceMyself() )
.then( name => externalLibrary.storeAndGetInfo(name) )
.then( info => saySomeInfo(info) )
.catch( err => console.log(err) );
introduceMyself(){
return asyncFunctionToGetAndSayMyName();
}
sayDomeInfo(info){
console.log(info);
}
我的问题是externalLibrary.storeAndGetInfo
期望这些参数:
storeAndGetInfo(string, callback(valueThatINeedForMyNextChainedFunction));
我觉得我可以将外部库函数包装在一个可链接的函数中(一个返回一个promise),然后使用the library q
推迟并解析回调函数,但是我被卡住,因为我不知道实际实现它。或者还有另一种方式吗?
PS以防它有所不同,这是在angularjs
应用
答案 0 :(得分:1)
您应该使用返回延迟承诺的函数来包装外部库的调用:
function promisedStore (name) {
var deferred = Q.defer(); //initialize deferred
externalLibrary.storeAndGetInfo(name, function(error, result) {
if (error) {
deferred.reject(new Error(error)); //reject promise if error in cb
} else {
deferred.resolve(result); //resolve promise if no error in cb
}
});
return deferred.promise;
}