jQuery - .always() 回调触发得太快

2023-12-02

我正在开发一个客户端 JS 应用程序,该应用程序应该读取 CSV 文件,每行进行一些 API 调用,然后将结果写回 CSV。我所关注的部分是如何编排请求并在所有完成后触发一个函数。这是我到目前为止所拥有的:

var requests = [];

// loop through rows
addresses.forEach(function (address, i) {
    // make request
    var addressRequest = $.ajax({
            dataType: 'json',
            url: 'http://api.com/addresses/' + address,
            success: function (data, textStatus, jqXhr) { APP.didGetAddressJson(data, i, jqXhr) },
            error: function (jqXhr, textStatus, errorThrown) { APP.didFailToGetAddressJson(errorThrown, i) },
        });
    requests.push(addressRequest);

    // make some more requests (handled by other success functions)
});

// leggo
$.when.apply($, requests).done(APP.didFinishGeocoding);

问题是,如果其中一行抛出 404done函数未被调用。我把它切换到always现在它被调用,但不是在最后——如果我将每个回调的执行记录到控制台,它通常在中间的某个地方。但是,如果我编辑 CSV,那么就不会出现错误,它会按预期在最后被调用。我在这里做的事情是否允许always早点开火?

Update:难道只是控制台正在记录它出故障?


您需要防止发送返回的承诺时出现错误$.when.apply($, requests)沿着错误路径。

这可以通过以下方式实现:

  • 链接.then()给你的$.ajax()调用,而不是指定“成功”和“错误”处理程序$.ajax()选项。
  • 通过转换为成功来处理错误(因为这是 jQuery,您必须从错误处理程序返回已解决的承诺)。

这种方法还允许您控制最终传送到的数据APP.didFinishGeocoding()

通过一些假设,代码的一般形式应如下所示:

function foo () {//assume there's an outer function wrapper 
    var errorMarker = '**error**';

    var requests = addresses.map(function (address, i) {
        return $.ajax({
            dataType: 'json',
            url: 'http://api.com/addresses/' + address
        }).then(function (data, textStatus, jqXhr) { //success handler
            return APP.didGetAddressJson(data, i, jqXhr); //whatever APP.didGetAddressJson() returns will appear as a result at the next stage.
        }, function (jqXhr, textStatus, errorThrown) { // error handler
            APP.didFailToGetAddressJson(errorThrown, i);
            return $.when(errorMarker);//errorMarker will appear as a result at the next stage - but can be filtered out.
        });
        // make some more requests (handled by other success functions)
    });

    return $.when.apply($, requests).then(function() {
        //first, convert arguments to an array and filter out the errors
        var results = Array.prototype.slice.call(arguments).filter(function(r) {
            return r !== errorMarker;
        });

        //then call APP.didFinishGeocoding() with the filtered results as individual arguments.
        return APP.didFinishGeocoding.apply(APP, results);

        //alternatively, call APP.didFinishGeocoding() with the filtered results as an array.
        //return APP.didFinishGeocoding(results);
    });
}

根据需要进行调整。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery - .always() 回调触发得太快 的相关文章

  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • Google App Engine:修改云运行环境

    我正在尝试部署一个使用自定义 Node js 服务器的 Next js 应用程序 我想将自定义构建变量注入应用程序 next config js const NODE ENV process env NODE ENV const envTy
  • 文件上传控件 OnChange 事件 JQuery

    我正在尝试使用 AJAX JQUERY 和 Net HTTPHandler 构建页面来上传文件 如下所示http dotnet dzone com news async file upload jquery and http dotnet
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • Electron - 为什么在关闭事件时将 BrowserWindow 实例设置为 null

    The 电子文档 https electronjs org docs api browser window 提供以下代码示例来创建新窗口 const BrowserWindow require electron let win new Br
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • jQuery 对象相等

    如何确定两个 jQuery 对象是否相等 我希望能够在数组中搜索特定的 jQuery 对象 inArray jqobj my array 1 alert deviceTypeRoot deviceTypeRoot False alert d

随机推荐

  • Rails - 当我仅访问生产中的操作时,401 未经授权

    我正在使用 Ruby On Rails 3 0 9 并且在开发环境中一切正常 当我切换到生产环境或将其上传到我们的服务器时 登录后我会返回到相同的登录页面 当我检查日志时 我可以看到以下内容 Started POST users login
  • C# 7.0 适用于 .NET 4.5 吗?

    我在 Visual Studio 2017 RC 中创建了一个项目 以检查是否可以在 NET Framework 4 5 项目中使用新的 C 7 0 语言功能 在我看来 参考后System ValueTupleNuGet 新元组工作正常 还
  • 如何让边框底部更接近文本?

    我想对链接使用边框底线 而不是文本装饰下划线 但我需要让线条更靠近文本 负填充是不可能的 那么我该怎么办 这是一个例子 a color 245fc1 position relative border bottom 1px solid 245
  • 如何在 Visual Studio 模拟器上删除设备的框架?

    我只需要与开发和测试相关的内容 我不需要巨大的 模拟 哑边框区域 该区域主要用于抓取和重新定位模拟器窗口 如今 即使是真正的设备也开始消除这些边框 我不需要它提供的有关设备方向的方向线索 在工具条或主窗口中 只需小的抓握手柄就足够了 它浪费
  • Angular v10 Service Worker 官方更新方法不起作用

    编辑摘要 我创建了一个最小的可重现的例子 我不再相信这与 css 或任何相关 font face就此问题作出的声明 问题在于官方的 Angular 方式swUpdate checkForUpdate 可能与appRef isStable订阅
  • 如何使用 Express 服务器对 api.github 进行 GET 调用

    我已经被封锁三天了 并在互联网上进行了研究 这是代码 api js const express require express const router express Router var http require http var ht
  • 如何使用内胚包装器来修复这个练习?

    这是我之前的后续question 假设我需要按路径查找 XML 节点 我可以编写一个函数来按名称获取子节点 import scala xml Node gt XmlNode def child name String XmlNode Opt
  • 将 print 的输出分配给 python 中的变量

    我想知道如何将 print 的输出分配给变量 so if mystring a 12 then print mystring a 12 我想像 kwargs 一样传递这个 test mystring 我怎样才能做到这一点 有关更多解释 我有
  • 如何使用自定义ant规则正则表达式更改属性文件中的属性

    在我的 Android 项目中 我在 project properties 文件中设置了以下属性 proguard config proguard cfg 我需要一个自定义宏来以某种方式设置和取消设置此属性 如何使用宏和正则表达式设置取消设
  • C# 引用和指针有什么区别?

    我不太明白 C 引用和指针之间的区别 它们都指向记忆中的某个地方 不是吗 我能弄清楚的唯一区别是指针不那么聪明 不能指向堆上的任何东西 可以免于垃圾回收 并且只能引用结构或基类型 我问这个问题的原因之一是 人们认为人们需要很好地理解指针 我
  • 在curl中发送json文件并使用plumber在R中接收它

    我需要发送一个包含多个值的 json 文件并使用水管工在 R 中接收它 我尝试过这个 但它似乎不起作用 library rjson install packages rjson get predict post predict functi
  • Jquery 实时复制另一个文本框值

    我想获取另一个文本框的值并将其实时输入到另一个文本框中 如何检测 TEXT 3 是否已更改 如果 TEXT 3 值更改 则必须将其输入到 TEXT 4 为了您的方便 这里是代码和演示 HTML
  • 使用PHP查询MDB文件,并返回JSON

    我有一个 Microsoft Access 数据库 我正在尝试使用 PHP 查询该表 并输出有效的 JSON 我有一个 MSSQL 数据库的等效代码 我正在尝试让我的代码做同样的事情 但只是针对 Access 数据库 这是MSSQL代码 m
  • Angular2 嵌套 formGroups - formArrays 和模板绑定

    问题是这样的 我有一个带有嵌套表单组的复杂表单 这是它的 简化 结构 gt MyForm formGroup gt Whatever01 formControl input gt Whatever02 formControl input g
  • Bundler如何卸载冲突的依赖项

    我正在尝试执行vagrant plugin install vagrant vbguest在我的 Mac 上 ProductName Mac OS X ProductVersion 10 12 6 BuildVersion 16G29 但之
  • 分页时出现 SQL 错误

    大家好 我们有一个完美工作的关系控制器网页 index admin 但在添加分页后 它全部崩溃了 想出 SQLSTATE 42S22 Column not found 1054 Unknown column Relationship sen
  • 我想在 Nuxt.js 中的 Vuex 中使用 window.localStorage

    我开发 nuxt js 应用程序 重点是登录和注销 我们将开发 JWT 系统的登录 您必须保持 vuex 登录状态 但是 当我刷新页面时 vuex 被初始化 我读过 gitvuex 持久状态 但很难理解如何初始化和设置它 在 nuxt js
  • WPF 使用数据绑定显示格式化的多行文本

    我需要使用 WPF 数据绑定显示以下内容 值发生变化 标题必须是粗体 信息行是普通文本 如果给定标头的信息不存在 我想折叠该部分 包括标头 我更喜欢所有数据 标题和信息项 都位于一个格式化字符串中 该字符串可以在我想要的位置换行 Heade
  • 我们应该支持哪些 Xamarin ABI

    目前 我认为我们的 Xamarin Android 应用程序 PCL 非常庞大 即使在发布模式下也是如此 我怀疑这是由于支持的架构造成的 目前我们已将它们全部选中 有谁知道我们是否必须选择所有这些 我们也根本不使用 Android NDK
  • jQuery - .always() 回调触发得太快

    我正在开发一个客户端 JS 应用程序 该应用程序应该读取 CSV 文件 每行进行一些 API 调用 然后将结果写回 CSV 我所关注的部分是如何编排请求并在所有完成后触发一个函数 这是我到目前为止所拥有的 var requests loop