问题标签 [promise]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
278 浏览

jquery - JQuery异步图片幻灯片预加载

我正在使用 JQuery 动画框架编写脚本。在这种情况下,我需要一系列不同的动画。当一个新动画开始时,我需要更改页面的背景图像。

动画框架(称为 JSTween)提供以下回调:

我正在寻找以下伪代码的 JQuery 实现:

我一直在寻找$.when和类似的工具,但我不知道如何正确使用它们。

0 投票
4 回答
64915 浏览

angularjs - Angular JS:如何绑定到 Promise

我正在尝试将承诺绑定到视图。我不知道你是否可以直接这样做,但这就是我正在尝试做的。任何想法我做错了什么?

注意:源有点做作超时并使用静态数据,但这是为了使代码更易于诊断。

编辑: JSFiddle 页面:http: //jsfiddle.net/YQwaf/27/

编辑:解决方案:原来你可以直接绑定承诺。我的原始代码有两个问题:

  1. 使用 setTimeout() 而不是 angular 的 $timeout 是一个问题。Angular 不知道它需要在触发超时时刷新 UI(你可以在 setTimeout 中使用 $scope.$apply 来解决这个问题,或者你可以只使用 $timeout )
  2. 绑定到返回承诺的函数是一个问题。如果它被第二次调用,它会做出另一个承诺。更好的是为 promise 设置一个范围变量,并且只根据需要创建一个新的 promise。(就我而言,这是在国家代码上调用 $scope.$watch)

HTML:

JS:

0 投票
1 回答
270 浏览

javascript - 使用 map/reduce 和 jQuery 顺序运行任意数量的脚本

我需要运行任意数量的脚本。下一个只能运行前一个已加载并执行。我知道 RequireJS (和相关的)将是正确的选择,但我正在尝试了解承诺,所以这是我的实验:

有人可以详细说明我的解决方案的陷阱和替代方案吗?

0 投票
6 回答
39856 浏览

javascript - 如何在 JSDoc 中指定 promise 的解析和拒绝类型?

我有一些返回promise 对象的代码,例如使用NodeJS 的Q库。

如何使用 JSDoc 记录这样的返回值?

0 投票
1 回答
140 浏览

node.js - Node promise-io - 为什么会崩溃?

我正在学习Node Beginner Tutorial,同时根据我的开发风格定制一些东西。例如我选择使用coffeescript 和requirejs。后者涉及大量常规数量之上的回调汤。通常这些是我喜欢使用 Promise 处理的情况。经过一些最小的研究,promise-io似乎是一个合理的解决方案。它可以工作,但突然间我遇到了一个使用 all 组合承诺的问题(这似乎类似于 jQuery.when - 这是我经常使用的一种技术)。

以下是我的 server.coffee 文件。因为它工作得很好,用all调用替换嵌套的延迟服务一个请求,然后挂起服务器。有谁知道问题是什么?

0 投票
2 回答
2937 浏览

asynchronous - 执行几个 mongoose 查询:如何改用 Promise?

我有以下代码,我想避免嵌套回调:

有任何想法吗?

0 投票
2 回答
347 浏览

javascript - 是否可以将模块加载作为一个承诺来实现?

我已经构建了一个单页应用程序,用户可以在其中构建报告。用户会看到一个表单,允许他们选择数据源、图表类型和主题,然后在确认页面加载所需的文件并绘制图表。

为了获得更好的性能,我想并行加载代码模块和数据。例如,如果用户选择“饼图”、“蓝色主题”和“航空公司统计”:

WHEN(加载js模块饼图)和(加载蓝色主题css)和(加载Airline Stats json)

THEN(绘制图表)

我发现了许多实现 AMD 的库,以及许多实现承诺的库,但没有一个库可以像上面的示例那样组合模块加载和承诺。这可能吗,是否有任何库已经实现了这一点?

我需要的是客户端 JavaScript。

0 投票
3 回答
2872 浏览

javascript - jQuery Deferred/Promises 动态数组未按正确顺序执行回调

感谢您对我在这里误解的任何见解。我的要求如下:

我有一组 URL。我想同时为每个 URL 触发一个 AJAX 请求,一旦第一个请求完成,就调用第一个回调。然后,如果第二个请求完成,则调用该回调,依此类推。

选项1:

显然这不起作用,因为不能保证响应会以正确的顺序完成。

选项 2:

这应该可以工作,但缺点是它会等到所有AJAX 请求都完成后,才会触发任何回调。

理想情况下,我应该能够在第一个回调完成后立即调用它,然后在收到该响应时链接第二个回调以执行(或者如果它已经解决,则立即执行),然后是第三个,依此类推。

数组长度是完全可变的,并且可以在任何给定时间包含任意数量的请求,因此仅对回调链进行硬编码不是一种选择。

我的尝试:

问题是回调以完全随机的顺序执行!例如,如果我将 'home.html'、'page2.html'、'page3.html' 添加到数组中,响应的顺序不一定是 'home.html'、'page2.html'、'page3 .html'。

我显然从根本上误解了承诺的工作方式。任何帮助感激不尽!

干杯

编辑

好吧,现在我更困惑了。我使用Alnitak 的答案和另一个使用JoeFletch 的答案的数组制作了这个 JSFiddle,但它们都没有像我预期的那样工作!谁能看到这里发生了什么?

编辑 2

得到它的工作!根据下面 JoeFletch 的回答,我对解决方案进行了如下调整:

TL;DR:我不理解 jQuery 承诺,没有它们就可以工作。:)

0 投票
2 回答
278 浏览

jquery - 链式 jQuery 承诺

我试图链接承诺,而不是管道,只是链接。

例如,我有这个方法:

我想多次执行这个方法,但是一个接一个。我创建了一个比 using 更有效的方法eval,但我对 using 不太满意eval

这个想法是executeTimes(3);你得到这个输出:

我在这里创建了一个实时示例:http: //jsfiddle.net/vtortola/Cfe5s/

最好的解决方案是什么?

干杯。

0 投票
1 回答
542 浏览

rest - Promise 响应适用于 GET,但不适用于 XHR 中的 POST

我正在尝试通过 DOJO 1.8 上的 XHR.post 调用 URL。我需要从承诺响应中捕获 STATUS 属性和 getHeader() ,但问题是,当我使用 POST 调用我的 URL 时,我没有任何承诺,而当我使用 GET 调用时,我拥有我需要的所有属性,但我只能将请求作为 POST 发送。

最奇怪的是我在 AngularJS 中有另一个运行良好的代码,这个代码做同样的事情。我正在测试 DOJO 和 AngularJS。

我需要捕获 STATUS 信息以检查它是否为 201(已创建),如果为真,我需要捕获 getHeader('location') 并调用从 getHeader('location') 获取的 URL。

看看我在 Dojo 1.8 中的方法: