我很难理解异步/等待的工作原理,我必须编写一个包含三个功能的程序:func1 func2concatenated
func1将字符串作为参数,并在延迟5秒后返回相同的字符串,func2async函数,该函数还将字符串作为参数并返回相同的字符串。 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语句将同步运行。这也意味着cd仍然是承诺。

可能的解决方案是:

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/

10-12 15:53