gpt4 book ai didi

javascript - Async Await 可以在没有 promise 的情况下工作吗? (简单的例子)

转载 作者:行者123 更新时间:2023-12-01 01:44:18 24 4
gpt4 key购买 nike

const getInfoFromURL = async() => {
const a = await test1();
const b = await test2();
};

const test1 = async() => {
setTimeout(() => {
console.log('test 1');
},6000);
};

const test2 = async() => {
setTimeout(() => {
console.log('test 2');
},6000);
};

getInfoFromURL();

示例: 6 秒后显示消息/test1/,然后再过 6 秒后显示消息/test2/。

结果:6秒后立即显示2条消息test1和test2。

我可以在不使用 Promise 的情况下实现这种情况吗?

最佳答案

我假设您真正想要实现的是运行 const a = wait test1();和 const b = wait test2();并行。考虑到这一点,我冒昧地更改了周围的模型代码,以向您展示如何并行执行此操作:

const getInfoFromURL = async() => {
const asyncResult1 = test1(), asyncResult2 = test2();
return [await asyncResult1, await asyncResult2];
};

const test1 = async() => {
return await new Promise(resolve => setTimeout(resolve, 6000)).then(() => 'test1');
};

const test2 = async() => {
return await new Promise(resolve => setTimeout(resolve, 6000)).then(() => 'test2');
};

console.time('timer');
getInfoFromURL().then((result) => { console.timeEnd("timer"); console.log(result)});

这应该输出timer: 600*.***ms['test1', 'test2']

我已将测试函数更改为使用 Promise 和 .then 返回“test1”和“test2”,并且对于 getInfoFromUrl() 的实际调用以使用 .then 来允许我们在解析时控制台日志(因此我们实际上可以测量所需的时间),因为我认为这些更改与您要解决的问题无关。

无论如何,重要的部分是 getInfoFromURL 函数中的内容。请注意,编写return [await test1(),await test2()]将不起作用,它们将按顺序运行。

关键是首先将函数的结果分配给变量(不等待结果),然后等待相同的变量。在这种情况下,异步操作在我们等待之前就已经开始了。

关于javascript - Async Await 可以在没有 promise 的情况下工作吗? (简单的例子),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52091686/

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