javascript – 按顺序排列的多个jQuery承诺

基本上我想要这个:

function do_ajax_calls(...){
  var d = $.Deferred();

  $.ajax(args).done(function(){

    $.ajax(args).done(function(){

      $.ajax(args).done(function(){
         d.resolve();
      });

    });

  })

  return d.promise();
}

但是ajax调用的数量取决于我传递给函数的参数,这是一个数组,因此我无法使用该代码.

该函数应返回仅在最后一次ajax调用完成时解析的promise.所以函数需要像这样调用:

 do_ajax_calls(....).done(function(){
   // here is the callback
 })

有谁知道我该怎么做?

解决方法:

承诺的原因之一是一个很大的原因是因为它们可以被链接.您可以利用此优势迭代地将其他请求链接到上一个请求的解析:

function do_ajax_calls() {
    var dfd = $.Deferred();
    var promise = dfd.promise();
    var responses = [];

    function chainRequest(url) {
        promise = promise.then(function (response) {
            responses.push(response);
            return $.ajax(url, { method: 'POST' });
        });
    }

    for (var i = 0, length = arguments.length; i < length; i++) {
        chainRequest(arguments[i]);
    }

    dfd.resolve();

    return promise.then(function (response) {
        return responses.slice(1).concat(response);
    });
}

上面的代码将返回一个最终解析为所有响应数组的promise.如果任何一个请求失败,则承诺将在第一次失败时拒绝.

JSFiddle

原文地址:https://codeday.me/bug/20190824/1708131.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


最后的控制台返回空数组.控制台在ids.map函数完成之前运行varids=[];varallLync=[]varuser=awaitUser.findOne(args.user)ids.push(user._id)user.following.map(x=>{ids.push(x)})ids.map(asyncx=>{varlync=awaitLync.find({"author":x}
我正在尝试将rxJava与我已经知道的内容联系起来,特别是来自JavaScript编程.rxJava的核心思想是否就像可观察者的承诺一样?解决方法:正如评论所解释的那样,承诺将允许您进行连锁操作,但最终,您将获得一个结果.使用RxJava,您可以多次收到通知,然后获得多个结果.Promise可以看作是异
config.jsconstconfig={base_url_api:"https://douban.uieee.com/v2/movie/",}export{config}http.jsimport{config}from"../config";classHTTP{requset({url,method="GET",data={}}){const
我正在阅读MDN中的javascript,并且遇到了这个谈论承诺并且不明白它意味着什么的部分.代码非常简单,但我不明白谨慎.回报承诺意味着什么?隐含地返回是什么意思?如果它是一个愚蠢的问题,请指向一些资源,我会将其标记为已关闭.doSomething().then(result=>doSomethingElse(result)
config.jsconstconfig={base_url_api:"https://douban.uieee.com/v2/movie/",}export{config}http.jsimport{config}from"../config";classHTTP{requset({url,method="GET",data={}}){const
这是我的代码main.cpp:#include<string>#include<iostream>#include<future>intmain(){usingnamespacestd;autop=promise<string>();p.set_value("Hello,world.");autof=p.get_future();cout<<f
基本上我想要这个:functiondo_ajax_calls(...){vard=$.Deferred();$.ajax(args).done(function(){$.ajax(args).done(function(){$.ajax(args).done(function(){d.resolve();});});})returnd.promise();}但是ajax调
我正在尝试使用promise而是出现类型错误:Promise不是构造函数.这是承诺:varPromise=newPromise(function(resolve,error){for(varkeyinexcludeValues){/*someifs*/minVal=someVa
我怎么能一个接一个地解雇承诺呢?waitFor(t),是一个返回在t时间后解析的promise的函数.我希望能做的是:waitFor(1000)Thenwhenfinished,console.log('Finishedwaitof1000millis')thenwaitFor(2000)Thenwhenfinished,console.log('Finishedwaitof2000millis')th
想在项目中用,发现自己不是很熟promise基本使用基本使用-思路newPromise()返回了一个状态机一个完全无法被外界影响的状态机构造函数,传入一个函数,两个参数,分别是reslove,reject表示执行的回调函数,也就是.then(),.cache()函数达到内部调用外部函数的作用,行
请阅读thisveryshortarticle以了解我想要做的事情.重点在于,正如作者所说,我“需要向用户询问几个问题,……验证输入数据并在输入错误时重新提问.”此外,我可能需要做更复杂的事情来验证输入,除了检查正则表达式.例如,请检查以确保用户未在先前的提示下输入当前输入.我有兴趣
参见英文答案>jsasync/awaitreturnpromise                                    1个这是功能:constgetUserIP=async()=>{letresponse=awaitfetch('https://jsonip.com/');letjson=awaitresponse.json();consol
1、首先需要理解async和await的基本含义  async是一个修饰符,async定义的函数会默认的返回一个Promise对象resolve的值,因此对async函数可以直接进行then操作,返回的值即为then方法的传入函数//0.async基础用法测试asyncfunctionfun0(){console.log(1)return
我觉得我有很好的机会找到我从木偶运算符那里获得的那些罕见的超时,但是有些人如何暂时没有抓住这个超时–我的问题是为什么?这是代码:varreadHtml=(url)=>{returnnewPromise(async(resolve,reject)=>{varbrowser=awaitpuppeteer.launch()
背景我正在努力学习承诺,我有一个我希望改进的承诺链.问题在学习如何链接承诺时,我不明白为什么有人宁愿回复承诺而不是回报它的价值.以下示例使用promise链接:letmyObj=newMyClass();myObj.getInfo().then(result=>writeOutput(FILE_NAME,result)).then(c
基本特性不能直接访问/操作DOM(只能使用特定的API:Promise、FetchAPI、CacheAPI)需要时直接唤醒,不需要时自动休眠离线缓存内容开发者可控一旦被安装则永远存活,除非手动卸载必须在HTTPS环境下工作(本地环境localhost除外)广泛使用了Promise使用生命周期相关
我有以下代码,基本上是app.js中的主路由器和仪表板js中的子路由器.每当我转到根URL“/”时,我会在浏览器控制台中收到警告.我不明白这里的问题是什么,重定向甚至工作正常,一切都显示出来,但我仍然得到这个巨大的警告,告诉我出了什么问题.我错过了什么?任何帮助赞赏.浏览器控制台警
我无法解释为什么这段代码执行如下:>“无法访问服务器”>“成功:数据已加载”为什么在无处可能出现解决时调用loadData().then()?我意识到我可以通过在第一个catch中抛出错误来“修复”代码,以便最后/更高的catch会看到错误.但我想知道显然解析我的代码的人或者是谁,导致在这种情
我不想为我使用的每个承诺键入.catch.如果不这样做,承诺造成的错误是非常无益的.纯粹为了这个目的使用像蓝鸟这样的整个图书馆让我感到不舒服.解决方法:对于开发期间的错误跟踪,V8(最近的Node.js和Chrome版本)默认已经有unhandledRejection(Node.js)和unhandledrejection(Chrome)
我正在尝试在java中实现一个简单的promise系统.我是为特殊目的而做的,所以请不要推荐任何图书馆.当我尝试实现一个带有Function作为参数的thenApply()方法时,我遇到了一个问题,类似于CompletableFuture,因此返回另一个类型的promise.承诺界面:publicinterfacePromise<T>{