问题标签 [when-js]
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.
promise - 需要正确调用 Promise reduce (when.reduce )
我有一个处理器函数,它接受一个“cmd”对象并返回一个承诺,其中分辨率与传入的“cmd”对象相同(添加了一个响应键)。 reduce
这是when.reduce
这什么也没做,它确实到达了.then
但承诺的数组永远不会触发,永远不会看到调试running processor...
如果我只运行一个处理器,它可以很好地运行 cmd[0]、cmds[1] 等。
我在这里想念什么?他们的 api 和wiki示例并没有给我任何见解。
重要更新: 下面的答案确实有效,但会引发未处理的拒绝错误。罪魁祸首是when库。它似乎不再活动,并且自节点 6 以来没有更新。我切换到 bluebird,它工作正常,无需对下面概述的代码进行任何更改。
javascript - Promise 和 upserting 到数据库
我目前正在解析一个 js 对象列表,这些对象被一个一个地插入到数据库中,与 Node.js 大致类似:
问题是当列表大小变得非常大(约 3000 个项目)时,并行解析所有项目会占用大量内存。使用 Promise 库添加并发限制非常容易,并且不会以这种方式耗尽内存(when/guard)。
但我也想优化 db upserts,因为 mongodb 提供了 bulkWrite 函数。由于一次解析和批量写入所有项目是不可能的,所以我需要将原始对象列表拆分为较小的集合,这些集合使用 Promise 并行解析,然后该集合的结果数组将传递给 Promisified bulkWrite。如果列表项,这将对剩余的集合重复。
我很难思考如何构建较小的承诺集,以便我一次只执行一组 parseSomeItems-BulkUpsertThem(类似于 Promise.all([set1Bulk][set2Bulk]),其中 set1Bulk是另一个并行解析器承诺数组吗?),任何伪代码帮助都将不胜感激(但我正在使用 when 如果这会有所不同)。
javascript - 何时/并行如何使用
当我尝试使用 when.js 并行函数时,我对可能做错的事情感到有些困惑:
https://github.com/cujojs/when/blob/master/docs/api.md#whenparallel
var parallel = require('when/parallel');
var resultsPromise = parallel(arrayOfTasks, arg1, arg2 /*, ... */);
据我了解,arrayOfTasks 可以是一个 Promise 数组?但是当我尝试用这样的并行替换 when.all 时遇到错误“TypeError:task.apply 不是函数”:
jquery - JQuery.when 多个 JSON 变量
我有这段代码,它使用$.getJSON()
2 个 URL 检索 JSON 并将结果保存为变量。然后我使用$.when()
andthen()
从这些变量中获取数据。但是,这仅在我一次做一个时才有效,每个都有自己的$.when()
,并且在我同时使用两者时不起作用。
我得到的控制台错误是:
jquery-latest.min.js:2 未捕获的类型错误:无法在对象的 Function.each (jquery-latest.min.js:2) 处读取未定义的属性“长度”。(dr:112) 在 Function.each (jquery-latest.min.js:2) 在 Object. (博士:108)在对象。(jquery-latest.min.js:2) 在 j (jquery-latest.min.js:2) 在 Object.fireWith [as resolveWith] (jquery-latest.min.js:2) 在 x (jquery-latest. min.js:4) 在 XMLHttpRequest.b (jquery-latest.min.js:4)`
谁能告诉我我做错了什么?谢谢。
javascript - $.when($("").function() == true).then() 没有按预期工作
我有一个返回真或假的函数。现在我想在函数返回“true”后执行一些代码。
该函数确定元素是否在屏幕上可见。我从这里拿走了它。
该元素在页面加载后 1-2 秒显示。但由于这也与用户的互联网连接有关,我不想使用 setTimout 函数。我尝试了一些事情并发现它在 if/else 语句中有效,但在 when/then 中无效。任何想法,这里出了什么问题?
我测试了一些东西,见下面的代码
when/then 语句的实际作用:它在 isOnScreen 函数运行时立即运行,但不会等到返回响应为真。因此控制台日志总是错误的。然后我实现了一个超时(仅用于测试目的)。在timeOut跑完之后,控制台日志总是假的。
它应该做什么:when / 语句应该在结果变为 true 后运行。
javascript - 如何获取对象列表并等待它们完成?
我有一个要遵循的 url 列表,并希望将结果存储在一个数组中。当前的实现是使用 map 来获取和 when.all 等待。如下所示:
但是 render() 方法抱怨“租用”对象是空的。
追踪结果:
所以我的问题是:
- 如何打印出promise和response信息?
- 我获取对象列表的方式是否正确?
- 如果没有,那么如何纠正它们?
javascript - jQuery:让第二个函数等待执行,直到第一个函数完成
我正在尝试使用when
并使done
第二个函数仅在第一个函数执行后才运行,但它不起作用。我在这里想要实现的是:
首先我使用$("#jobshome").load("jobs/newest-jobs .js-toprow");
从外部页面加载一个div(在同一个域中,这里没有跨域),然后在它完全加载后,下一个脚本,即一个简单的文本滑块,将运行。但是现在外部 HTML 不再加载到“#jobshome”中了。
当我不使用这种方法时,我得到的结果是整个外部 div 将加载到单个滑块中,这不是我需要的。
如果我像这样使用初始部分,它可以工作,但不像预期的那样:
我的代码如下:
javascript - 如何运行get json并保存为变量,然后在其他方法中使用
我想解析一个 JSON 文件,然后将其数据存储在一个变量中并在代码的不同部分使用它。我认为为此我应该使用$.when().done()
. 但是,我不知道如何传递数据。以下代码不是函数,但它显示了我想要实现的目标。
我需要发生以下情况。1- 获取 JSON 2- 将其保存在变量中。3-在代码中提供变量以使用其数据。
至少 JSON 数据需要在少数方法运行之前准备好。
任何想法?
提前致谢。