Javascript 区别于;返回新承诺();在普通函数中,直接使用异步函数
以下两种定义之间有什么区别吗Javascript 区别于;返回新承诺();在普通函数中,直接使用异步函数,javascript,async-await,Javascript,Async Await,以下两种定义之间有什么区别吗 const makeGuess = async function (guess) { const answer = await getAnswer(); // assume no error here if (guess == answer) { return Promise.resolve('yay'); } else { return Promise.reject('boo'); } }; con
const makeGuess = async function (guess) {
const answer = await getAnswer(); // assume no error here
if (guess == answer) {
return Promise.resolve('yay');
} else {
return Promise.reject('boo');
}
};
const makeGuess = function (guess) {
return new Promise(async function(resolve, reject) {
const answer = await getAnswer(); // assume no error here
if (guess == answer) {
resolve('yay');
} else {
reject('boo');
}
};
};
如果您使用的是异步函数,则不需要返回承诺。从异步函数返回的任何内容都将是promise
const makeGuess=异步函数(guess){
const answer=等待getAnswer();
如果(猜测=答案){
返回“耶”;
}否则{
扔“布”
}
};
makeGuess(‘测试’)
.then(success=>console.log(success))//yay-如果返回
.catch(err=>console.error(err))//boo-如果抛出
异步/等待功能构建在承诺的顶部。要明确的是,它们之间没有太大区别。引用NodeJS关于Async/Await()的学习文章
他们减少了关于承诺的样板文件,以及链接承诺的“不打破链条”限制
一定要看一下上面的链接,以便更好地理解这个概念。但是,您重新编写的函数实际上与我的第一个示例完全相同,还是有区别?它应该做完全相同的事情,所以哪个“更好”。。。你的,还是我的第一个例子,还是我的第二个例子?是哪一个比其他任何一个都好,还是这只是选择的问题?在您的示例中,您不必要地从异步函数返回承诺,而异步函数无论如何都会返回承诺。所以我的示例更简洁,没有不必要的代码。好吧,也许有时候更明确地说明返回的内容会有所帮助?更清楚地表明,您实际上是在回报一个承诺,而不是一个简单的价值。无论如何,我最初的问题不是如何使第一个示例更简洁,而是第一个示例和第二个示例之间是否存在任何有意义的差异,或者它们是否在异步性能方面实现完全相同的结果。在第二种情况下,如果
getAnswer
中有任何错误,当您等待makeGuess()
时,它将不会被捕获。它不会传播错误@阿迪加这只是一个简单的例子。。。假设getAnswer
中没有错误。。。它只是根据猜测是否与答案匹配来解决或拒绝