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
中没有错误。。。它只是根据猜测是否与答案匹配来解决或拒绝