我很难理解异步/等待的工作原理,我必须编写一个包含三个功能的程序:func1
func2
和concatenated
。func1
将字符串作为参数,并在延迟5秒后返回相同的字符串,func2
是async
函数,该函数还将字符串作为参数并返回相同的字符串。 concatenated
是一个使用两个字符串(s1,s2)
作为参数的函数,并使用上述两个函数((func1(s1) and func2(s2))
)在5秒后返回其串联结果。因此,如果将("hello"," world")
传递给concatenated
,则应返回hello world
。我的代码是:
function func1(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 5000);
});
}
async function func2(x) {
const a = await func1(x);
return a;
}
function concatenated(a,b){
const c = func2(a).then(result =>{console.log(result)});
const d = func2(b).then(result =>{console.log(result)});
return (c+d) ;
}
concatenated("hello"," world")
这段代码只给我:
hello world
我该如何纠正?
最佳答案
问题在于concatenated
函数的return语句将同步运行。这也意味着c
和d
仍然是承诺。
可能的解决方案是:
async function concatenated(a,b){
const c = await func2(a);
const d = await func2(b);
return (c+d);
}
concatenated("hello", " world").then(result => {
console.log(result); // hello world
})
注意,异步函数将始终返回promise。
关于javascript - javascript async/await and promise,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57222364/