Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺替换多次调用的回调gettin_Javascript_Promise_Bluebird - Fatal编程技术网

Javascript 承诺替换多次调用的回调gettin

Javascript 承诺替换多次调用的回调gettin,javascript,promise,bluebird,Javascript,Promise,Bluebird,我有一个方法,它做一些事情并调用回调,在一定时间后它也会这样做 var myFunction = function(callback){ setInterval(function(){ var stuff; //do some stuff callback(stuff) }, 3000); } 我能把它改成承诺函数吗?如果是,用户将如何调用该函数?我计划使用蓝鸟图书馆。承诺是一次性设备。他们解决了一次,而且只有一次,然后他们的状态就不能改变了。因此,它们不是重

我有一个方法,它做一些事情并调用回调,在一定时间后它也会这样做

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

我能把它改成承诺函数吗?如果是,用户将如何调用该函数?我计划使用蓝鸟图书馆。

承诺是一次性设备。他们解决了一次,而且只有一次,然后他们的状态就不能改变了。因此,它们不是重复事件的好的甚至是可行的替代品

要将承诺用于多次发生的事情,您必须有某种类型的接口,允许您每次创建一个新的承诺,并且调用方每次都可以以某种方式访问该新的承诺。这似乎根本不适合您的特定界面


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

承诺是一次性设备。他们解决了一次,而且只有一次,然后他们的状态就不能改变了。因此,它们不是重复事件的好的甚至是可行的替代品

要将承诺用于多次发生的事情,您必须有某种类型的接口,允许您每次创建一个新的承诺,并且调用方每次都可以以某种方式访问该新的承诺。这似乎根本不适合您的特定界面


像您正在使用的普通回调是循环事件的最合乎逻辑的接口。

OP在一篇评论中询问了如何使用承诺来处理从interval triggered函数中进行的异步调用的结果。看起来是这样的:

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

这是使用。还有很多其他的实现……jQuery、q等等。如果需要,我可以添加其他风格的示例。

OP在一篇评论中询问,关于使用承诺来处理从interval触发函数中进行的异步调用的结果。看起来是这样的:

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


这是使用。还有很多其他的实现……jQuery、q等等。如果需要,我可以添加其他风格的示例。

1。您从
myFunction
2返回承诺。你可以在
setInterval
中解析一个承诺,你能详细说明一下你想用这个承诺实现什么吗?我的理解是,当我们调用resolve时,承诺就完成了,我们可以多次调用resolve吗?@smcrohan我只是在这里尝试一下。。。所以我想知道如何正确地处理承诺中的内容。从表面上看,一个承诺似乎没有什么意义,因为你没有在回拨时做任何事情,也没有等待它的完成。例如,如果您希望计时器在
回调完成后运行3秒(而不是上次计时器触发后的3秒)1,那么这一点是有意义的。您从
myFunction
2返回承诺。你可以在
setInterval
中解析一个承诺,你能详细说明一下你想用这个承诺实现什么吗?我的理解是,当我们调用resolve时,承诺就完成了,我们可以多次调用resolve吗?@smcrohan我只是在这里尝试一下。。。所以我想知道如何正确地处理承诺中的内容。从表面上看,一个承诺似乎没有什么意义,因为你没有在回拨时做任何事情,也没有等待它的完成。一个有意义的例子是,如果您希望计时器在
回调完成后运行3秒(而不是上次计时器触发后的3秒),哦,好的。既然承诺在这里不起作用,那么哪一个是更好的解决方案pub-sub或回调?@neolivz4ever-如果您对该事件感兴趣的代码不止一段,甚至数量不确定,那么您可能需要某种pub-sub解决方案来处理对事件流感兴趣的所有内容。但是,如果只有一段代码,那么回调可能会更简单,工作也很好。这是有道理的。谢谢。:)@Neolivz4有没有检查过可观察的对象和库,比如RxJS或BaconJS。哦,好的。既然承诺在这里不起作用,那么哪一个是更好的解决方案pub-sub或回调?@neolivz4ever-如果您对该事件感兴趣的代码不止一段,甚至数量不确定,那么您可能需要某种pub-sub解决方案来处理对事件流感兴趣的所有内容。但是,如果只有一段代码,那么回调可能会更简单,工作也很好。这是有道理的。谢谢。:)@Neolivz4有没有检查过Observable和库,比如RxJS或BaconJS。即使我们在内部使用promise,谁使用过该方法,仍然会通过回调调用它,对吗?即使我们在内部使用promise,谁使用过该方法,仍然会通过回调调用它,对吗?