javascript - 将基于回调逻辑的库函数集成到 Promise 链中

标签 javascript angularjs promise angular-promise q

为了处理 promise ,我返回并将它们链接到 .then() 。但是,我必须使用需要回调但不返回 promise 的第三方库。

为了清楚起见,举一个假的例子:

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 中应用程序

最佳答案

您应该使用返回延迟 promise 的函数来包装外部库的调用:

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

关于javascript - 将基于回调逻辑的库函数集成到 Promise 链中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42532665/

相关文章:

javascript - 使用带有 Rails 的 React Datepicker 遇到问题

javascript - AngularJS:理解设计模式

javascript - ui-utils 手机 mask 不适用于 Ionic 输入

node.js - Node.js 应用程序中未定义 Angular

javascript - 使用异步方法测试 React 组件

javascript - SweetAlert2 不适用于 IE 11,未定义 Promise

javascript - 使用extendscript在illustrator中缩放对象

Javascript,像这样将数组转换为字符串

javascript - jquery 将值放入输入框

JavaScript:Promise.all 返回未定义