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,谁使用过该方法,仍然会通过回调调用它,对吗?