将基于回调逻辑的库函数集成到承诺链中

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; 
}