将基于回调逻辑的库函数集成到承诺链中
Integrate a callback logic based library function into promise chain
为了处理承诺,我 return 并将它们与 .then()
链接在一起。但是,我必须使用第三方库,该库需要回调并且没有 return 承诺。
为清楚起见,举个假例子:
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));
我觉得我可以将外部库函数包装在一个可链接的函数中(一个 return 是一个承诺),然后使用 the library q
来延迟和解析回调函数,但后来我卡住了,因为我不知道要实际实现它。或者有别的办法吗?
PS 以防万一,这是在 angularjs
应用程序中
您应该使用 returns 延迟承诺的函数包装外部库的调用:
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;
}
为了处理承诺,我 return 并将它们与 .then()
链接在一起。但是,我必须使用第三方库,该库需要回调并且没有 return 承诺。
为清楚起见,举个假例子:
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));
我觉得我可以将外部库函数包装在一个可链接的函数中(一个 return 是一个承诺),然后使用 the library q
来延迟和解析回调函数,但后来我卡住了,因为我不知道要实际实现它。或者有别的办法吗?
PS 以防万一,这是在 angularjs
应用程序中
您应该使用 returns 延迟承诺的函数包装外部库的调用:
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;
}