排队的函数调用请求javascript
Queueing a function call request javascript
我有一个这样的函数
function queuingFunction(name){
var deferred = $q.defer()
$timeout(function(){
console.log("my name is ",name);
deferred.resolve(true);
},3000)
return deferred.promise;
}
我像这样调用函数
communicatorBaseService.queuingFunction("杰克");communicatorBaseService.queuingFunction("max");communicatorBaseService.queuingFunction("雷");
在控制台中,所有3个结果将在3秒后显示。
我需要的是,在第三秒杰克显示在控制台,再过3秒max显示然后再过3秒Ray显示。
如果我在执行之间调用queuingFunction,它应该被添加到执行队列中。
我想做的是
- 接收执行函数的请求
- 将参数添加到队列
- 用queue 调用queuingFunction
- 使用queue[0]运行queuingFunction
- 在queuingFunction完成时删除队列[0]
- 检查队列[0]位置是否有剩余,使用当前队列重新运行函数
很确定这不是最好的方法,有什么好的方法可以做到这一点呢?我使用的是Angular,因此$q在代码中。我不想用jQuery
从您的评论中听起来,您希望能够只是进行一些函数调用,并将其操作与之前的操作自动排序。如果是这样,您将需要某种类型的队列对象来累积正在进行和挂起的操作。
Promises已经是一种队列了,所以如果你可以从一个promise开始,每次调用函数时在之前的操作的末尾添加一个新的promise,它就可以对它们进行排序。这里有一种方法:
// initialize queue with a resolved promise
var queue = $q();
function queuingFunction(name){
// chain this operation onto whatever operation was previously queued
queue = queue.then(function() {
var deferred = $q.defer()
$timeout(function(){
console.log("my name is ",name);
deferred.resolve(true);
},3000)
return deferred.promise;
});
}
然后,你可以调用:
queuingFunction("Jack");
queuingFunction("max");
queuingFunction("Ray");
并且,这三个操作是顺序的。
下面是使用ES6标准承诺的工作演示:http://jsfiddle.net/jfriend00/adq3L6zt/
使用@jfriend00方法,如果有人感兴趣,我使用angular $q做了以下操作
var queue = $q(function(resolve,reject){resolve()});
service.queuingFunction = function(name){
// perform some asynchronous operation, resolve or reject the promise when appropriate.
queue = queue.then(function() {
var deferred = $q.defer()
$timeout(function(){
console.log("my name is ",name);
deferred.resolve(true);
},3000)
return deferred.promise;
});
}
相关文章:
- 使用密码对话框Javascript请求帮助
- 如何使用JavaScript请求网页
- JavaScript请求/操作框架或工具包
- Microsoft认知服务JavaScript请求'访问控制允许来源'
- var someSome=(函数(){..}());一个奇怪的javascript请求
- 如何获得只响应的渲染javascript请求
- Rails控制器操作可以同时处理html和javascript请求吗
- 自动为 JavaScript 请求添加源映射标头
- Google Geocoder 在 url 和 javascript 请求之间有不同的结果
- 通过javascript请求和响应第三方域
- 使用 JavaScript 请求 HTML 页面(Angular 应用程序)
- 如何使用 javascript 请求库忽略无效的 SSL 证书
- 如何使用 PHP 或 JavaScript 请求超过 10000 次的 Steam API
- 定期的javascript请求停止发生
- 无论如何,要将这个JavaScript请求安全地发送到PHP-(这是不可能的)
- 跨域脚本javascript请求
- Web服务和Javascript请求位于同一本地主机端口上
- 来自android的实时javascript请求或来自Controller Cakephp.php的调用javascri
- 非常简单的javascript请求.抓斗元件ID
- Javascript:请求解释