gpt4 book ai didi

javascript - Bluebird promise : Dynamically build props object, 但并行执行

转载 作者:行者123 更新时间:2023-11-30 16:39:51 25 4
gpt4 key购买 nike

对于这里给出的例子:

https://github.com/petkaantonov/bluebird/blob/master/API.md#props---promise

Promise.props({
pictures: getPictures(),
comments: getComments(),
tweets: getTweets()
}).then(function(result) {
console.log(result.tweets, result.pictures, result.comments);
});

现在,如果我想动态构建 Prop 对象?喜欢

var propObj = {};

if (cond1) {
propObj.tweets = getTweets();
}
if (cond2) {
propObj.pictures = getPictures();
}
if (cond3) {
propObj.comments = getComments();
}

Promise.props(propObj)
.then(function(result) {
console.log(result);
});

以上代码无法按预期工作。函数 getTweets、getPictures、getComments 将在 propsObj 的构造期间强制执行。

但是,我真正想要的是在 Promises.props(propObj) 阶段并行执行这些函数,然后返回结果对象。有办法做到这一点吗?

最佳答案

将我的评论变成一个答案,或许可以结束这个问题......

您的示例与 Bluebird 代码示例的工作方式相同。在 Bluebird 示例中,函数 getPictures()getComments() 以及 getTweets() 在实际调用 Promise.props() 之前被调用- 与您的代码示例中的相同。传递给 Promise.props() 的是一个对象,其属性是 promise。

因此,在您的示例和 Bluebird 示例中发生的情况如下:

  1. if (cond1),启动 getTweets() 并将生成的 promise 分配给 propObj.tweets。该异步操作在后台继续。
  2. if (cond2),启动 getPictures() 并将生成的 promise 分配给 propObj.pictures。该异步操作在后台继续。
  3. if (cond3),启动 getComments() 并将生成的 promise 分配给 propObj.comments。该异步操作在后台继续。
  4. 调用 promise.props(propObj),它只是迭代 propObj 的属性,然后等待调用 .then() 处理程序,直到它找到的所有 promise 都已完成。
  5. 最终所有异步操作完成,.then() 处理程序被调用。

已经调用了生成 promise 的初始函数,操作已经在进行中。您的代码与 Bluebird 示例的工作方式没有什么不同。不确定您要解决什么问题。

当然,你确实意识到,如果你的函数实际上只是同步函数调用,那么在常规 Javascript 中不存在同步函数调用的并行操作,因为这里的主线程是单线程的。一次只有一件事实际执行。如果操作是异步的(例如网络或异步文件 I/O),那么在调用启动后您会得到一些实际的并行操作,因为在初始调用返回后 native 代码库正在处理其他线程中的事情),但事实并非如此发生在常规同步函数调用中。

关于javascript - Bluebird promise : Dynamically build props object, 但并行执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32161864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com