问题标签 [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.

0 投票
1 回答
39 浏览

javascript - 轻松捆绑包含需要指令的 JavaScript 文件的方法

是否有一些应用程序可以自动捆绑(和缩小)其中有require('file.js')调用的 JS 项目?以便将它们合并并生成一个文件。

具体来说,我在谈论when.js,一个包含大量文件和依赖项的 JS 库。我尝试了几个工具,比如 node.js 和 npm,但我真的不习惯这些。我不确定他们是否能够做到这一点。从安装页面我认为这是可能的(它还指出有一个缩小文件,但项目或版本中没有)。

0 投票
1 回答
719 浏览

promise - 需要正确调用 Promise reduce (when.reduce )

我有一个处理器函数,它接受一个“cmd”对象并返回一个承诺,其中分辨率与传入的“cmd”对象相同(添加了一个响应键)。 reduce这是when.reduce

这什么也没做,它确实到达了.then但承诺的数组永远不会触发,永远不会看到调试running processor...

如果我只运行一个处理器,它可以很好地运行 cmd[0]、cmds[1] 等。

我在这里想念什么?他们的 api 和wiki示例并没有给我任何见解。

重要更新: 下面的答案确实有效,但会引发未处理的拒绝错误。罪魁祸首是when库。它似乎不再活动,并且自节点 6 以来没有更新。我切换到 bluebird,它工作正常,无需对下面概述的代码进行任何更改。

0 投票
2 回答
607 浏览

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 如果这会有所不同)。

0 投票
0 回答
70 浏览

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 不是函数”:

0 投票
1 回答
186 浏览

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)`

谁能告诉我我做错了什么?谢谢。

0 投票
1 回答
64 浏览

javascript - $.when($("").function() == true).then() 没有按预期工作

我有一个返回真或假的函数。现在我想在函数返回“true”后执行一些代码。

该函数确定元素是否在屏幕上可见。我从这里拿走了它。

该元素在页面加载后 1-2 秒显示。但由于这也与用户的互联网连接有关,我不想使用 setTimout 函数。我尝试了一些事情并发现它在 if/else 语句中有效,但在 when/then 中无效。任何想法,这里出了什么问题?

我测试了一些东西,见下面的代码

when/then 语句的实际作用:它在 isOnScreen 函数运行时立即运行,但不会等到返回响应为真。因此控制台日志总是错误的。然后我实现了一个超时(仅用于测试目的)。在timeOut跑完之后,控制台日志总是假的。

它应该做什么:when / 语句应该在结果变为 true 后运行。

0 投票
1 回答
1544 浏览

javascript - 如何获取对象列表并等待它们完成?

我有一个要遵循的 url 列表,并希望将结果存储在一个数组中。当前的实现是使用 map 来获取和 when.all 等待。如下所示:

但是 render() 方法抱怨“租用”对象是空的。

追踪结果:

所以我的问题是:

  1. 如何打印出promise和response信息?
  2. 我获取对象列表的方式是否正确?
  3. 如果没有,那么如何纠正它们?
0 投票
1 回答
1082 浏览

javascript - jQuery:让第二个函数等待执行,直到第一个函数完成

我正在尝试使用when并使done第二个函数仅在第一个函数执行后才运行,但它不起作用。我在这里想要实现的是:

首先我使用$("#jobshome").load("jobs/newest-jobs .js-toprow");从外部页面加载一个div(在同一个域中,这里没有跨域),然后在它完全加载后,下一个脚本,即一个简单的文本滑块,将运行。但是现在外部 HTML 不再加载到“#jobshome”中了。

当我不使用这种方法时,我得到的结果是整个外部 div 将加载到单个滑块中,这不是我需要的。

如果我像这样使用初始部分,它可以工作,但不像预期的那样:

我的代码如下:

脚本来源:https ://codepen.io/TyStelmach/pen/yygvNK

0 投票
1 回答
54 浏览

javascript - 如何运行get json并保存为变量,然后在其他方法中使用

我想解析一个 JSON 文件,然后将其数据存储在一个变量中并在代码的不同部分使用它。我认为为此我应该使用$.when().done(). 但是,我不知道如何传递数据。以下代码不是函数,但它显示了我想要实现的目标。

我需要发生以下情况。1- 获取 JSON 2- 将其保存在变量中。3-在代码中提供变量以使用其数据。

至少 JSON 数据需要在少数方法运行之前准备好。

任何想法?

提前致谢。

0 投票
1 回答
149 浏览

javascript - 如何在Javascript中安装库'When'

我有 2 个文件:index.html 和 index.js。我正在使用它们来尝试进行高速公路通信。高速公路可以工作,但“何时”不起作用。

我已经使用 bower 下载并安装了 Autobahn,然后从 html 中手动包含 autobahn.js。我对 When 做了同样的事情,但是在 When 库中出现了一个错误。

索引.html:

当我在网络浏览器中打开 index.html 时,我得到以下信息:

错误