gpt4 book ai didi

javascript - 在 Node 中处理嵌套异步等待调用的正确方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 23:08:06 26 4
gpt4 key购买 nike

尝试学习 Javascript 中的异步模式,但它似乎没有等待下一行。在以下示例中,集合是请求对象,而不是实际解析的主体。 await 不应该等待请求完成吗?

async function importUsers(endpoint) {
const options = {
data: search,
uri: endpointCollection,
headers,
}

try {
const collection = await browser.post(options, (err, res, body) => JSON.parse(body))
// collection is the request object instead of the result of the request
const users = await collection.data.forEach(item => parseUserProfile(item));

await users.forEach(user => saveUserInfo(user))
} catch(err) {
handleError(err)
}
}



async function parseUserProfile({ username, userid }) {
const url = userProfileString(username)

try {
const profile = await browser.get(url, headers, (err, res, body) => {
return { ... } // data from the body
})
} catch(err) {
handleError(err)
}
}

最佳答案

Async/Await 仅适用于返回(并解决) promise 的函数。

以下示例将在 3 秒后写入控制台,然后继续。

// Tell the browser that this function is asynchronous
async function myFunc() {
// Await for the promise to resolve
await new Promise((resolve) => {
setTimeout(() => {
// Resolve the promise
resolve(console.log('hello'));
}, 3000);
});
// Once the promise gets resolved continue on
console.log('hi');
}

// Call the function
myFunc();

没有 async/await,输出如下:

hi
hello

这是一个没有 async/await 的例子:

// Tell the browser that this function is asynchronous
async function myFunc() {
// Skip await
new Promise((resolve) => {
setTimeout(() => {
// Resolve the promise
resolve(console.log('hello'));
}, 3000);
});
// Since await was not used, this will print first
console.log('hi');
}

// Call the function
myFunc();

这是因为 hi 输出将运行,然后在 3 秒后超时运行。

但是使用 async/await,输出看起来像这样:

hello
hi

这是因为我们等待超时,然后我们运行 hi 输出。

关于javascript - 在 Node 中处理嵌套异步等待调用的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44090197/

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