Bluebird没有正确解决承诺

时间:2016-04-27 13:20:02

标签: javascript bluebird

我正在尝试将froogaloop javascript api转换为promisified API调用,

这是我的代码

FroogaLoopPlayer.promisify = (player) => {
  //player.on = player.addEvent;

  _.each(functionNames, (fn) => {
    _.each(fn, (value, key) => {
      player[key] = () => {
        var data;
        return new Bluebird(resolve => {
          player.api(value, (d) => {
            console.log(d);
            data = d;
            console.log(data);
          });

          resolve(data);
        });
      };
    });
  });

  return player;
}; 

问题是,我得到的数据总是未定义的。我可能做错了什么?我已经尝试了这个,我想这是正确的方法。

return new Bluebird(resolve => {
  player.api(value, resolve);
});

1 个答案:

答案 0 :(得分:0)

请勿在调用异步函数(resolve() is undefined of course)之后放置data,但在回调中:

return new Bluebird(resolve => {
  player.api(value, (d) => {
    resolve(d);
  });
}).then(data => {
  console.log(data);
  return data;
});

您也可以只使用player.api(value, resolve)