提问者:小点点

获取并行异步/等待工作javascript[重复]


我试图并行运行两个彼此不依赖的异步操作,但我似乎无法让它工作。

const activity = fetchActivity(...)
const progress = fetchProgress(...)
await activity
await progress

当我打印的属性时,它们都是未定义的。

当我这样运行它时,属性会显示出来。

const activity = await fetchActivity(...)
const progress = await fetchProgress(...)

我在想,并行方法

更新:

因此,显然我无法回答我自己的问题,因为问题已经结束,但我首先要感谢那些指导我找到正确答案的人,尽管他们没有回答我的问题。

虽然下面给出了我的问题的实际解决方案,但是这里给出了不使用这种方法的原因:等待多个并发的await操作,我应该转而追求已经到处提到的解决方案。

答:

const activity = fetchActivity(...)
const progress = fetchProgress(...)
const activityData = await activity
const progressData = await progress

共2个答案

匿名用户

方法返回

是一个延迟对象,主要用于帮助处理异步操作。br>这是必需的,因为JS是单线程环境。并且您不希望阻塞主执行线程或长异步操作。

//将返回一个承诺。

您可以在解析对象时使用运行回调,也可以改用

如果您选择等待,它实际上会等到您传递到下一行,即使操作是异步的(例如,线程没有被阻塞,但代码感觉是同步的)。

如果您不想等待结果,您可能更喜欢使用

const res1 = await promise1; 
const nextLine = 1+1; // will happen after the promise is resolved

promise1.then(res1 => // register callback and do something with the response).
const nextLine = 1+1; // will happen immediately 

现在,在您了解了什么是之后,您可以使用方法进行并行执行。

接受一个承诺数组,并返回一个承诺,该承诺将在解决所有其他承诺时解决。

const fetchActivityPromise = fetchActivity(..)
const fetchProgressPromise = fetchProgress(..)
const promiseRes = Promise.all([fetchActivityPromise, fetchProgressPromise]);
promiseRes.then(r => ...)
console.log('here before the promiseRes.then was called');

匿名用户

您可以转而使用promise.all():

例如:

await Promise.all([call1(), call2()]);

您可以通过以下方式存储结果:

let [res1, res2] = await Promise.all([call1(), call2()]);

希望对你有帮助!

相关问题