我正在尝试在https://github.com/seishun/node-steam-trade上调用Bluebird promisificator,但是该库正在使用非节点回调。

例如(Babel的ES6语法):

import bluebird from 'bluebird';
import SteamTrade from 'steam-trade';

bluebird.promisifyAll(SteamTrade.prototype);

let steamTrade = new SteamTrade();

// some kind of set sessionid/cookies

let result = await steamTrade.openAsync('my-steam-id');


最后一行没有完成,因为传递给回调的第一个参数是“数据”,而不是错误(docs)。

如何配置bluebird处理第一个参数的数据?

最佳答案

您可能要使用when.js(https://github.com/cujojs/when/blob/master/docs/api.md#whenlift

或者,您可以编写自己的Promise包装器。

steamTrade.openAsync = function(id){
  var promise = new bluebird( function(resolve, reject){
    steamTrade.open(id, function(data){ resolve(data); });
  });
  return promise;
};

关于javascript - 在非 Node 样式的回调中使用Bluebird进行 promise ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37259607/

10-12 19:58