承诺多次调用替换回调gettin

时间:2015-05-04 01:49:58

标签: javascript promise bluebird

我有一些方法可以执行某些操作并调用回调,并且在一定时间后它也会执行相同的操作。

var myFunction = function(callback){
  setInterval(function(){
    var stuff; 
    //do some stuff
    callback(stuff)
  }, 3000);
}

我可以将此更改为承诺功能吗?如果是,用户将如何调用该功能?我打算用蓝鸟图书馆。

2 个答案:

答案 0 :(得分:5)

Promise是一次性设备。他们只解决一次,之后就无法改变他们的状态。因此,它们对于经常性事件来说并不是好的甚至是可行的替代品。

要使用多次出现的承诺,您必须拥有某种界面,允许您每次创建新承诺,并且呼叫者每次都能以某种方式访问​​该新承诺。这根本不适合您的特定界面。

您正在使用的普通回调是重复事件的最合理的接口。

答案 1 :(得分:0)

OP在评论中询问使用promise来处理在间隔触发函数中进行的异步调用的结果。这看起来像这样:

var myFunction = function(callback){
  setInterval(function(){
    var promise = new Promise(function(resolve,reject) {
      var stuff;
      // Do some potentially-long-running work that modifies 'stuff'
      if (stuffWorked)
        resolve(stuff);
      else
        reject(stuff);
    });
    promise.then(function(returnVal) {
      callback(returnVal);
    });
  }, 3000);
}

这是使用ECMAscript 6 form of promises。存在许多其他实现... jQuery,q等。如果需要,我可以添加其他风格的示例。