gpt4 book ai didi

javascript - 在异步函数中返回等待值就是返回一个 promise

转载 作者:太空宇宙 更新时间:2023-11-04 15:29:46 25 4
gpt4 key购买 nike

在 Javascript 中,我试图从异步函数返回等待结果。看来,如果我在异步函数中使用该结果,那么一切都会正常工作,它会被视为resolve()参数,并且一切都很好。但是,如果我尝试返回结果,即使存在等待语句,它也会被视为回调。

例如(在异步函数中使用等待结果): https://jsfiddle.net/w7n8f7m7/

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<input type="text" id="test">

function retPromise() {
return new Promise((resolve, reject) => resolve('Hello'));
}

async function putText() {
let result = await retPromise();
$("#test").val(result);
}

putText();

与返回值并在异步函数外部使用它相比:https://jsfiddle.net/hzoj2zyb/

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<input type="text" id="test">

function retPromise() {
return new Promise((resolve, reject) => resolve('Hello'));
}

async function putText() {
let result = await retPromise();
return result;
}

$("#test").val(putText());

为什么等待在第一个 fiddle 中正确返回执行的 promise ,但在第二个 fiddle 中却没有正确返回?是否因为jquery语句位于异步函数范围内,所以它可以正常使用?

最佳答案

来自async_function MDN :

Return value

A Promise which will be resolved with the value returned by the async function, or rejected with an uncaught exception thrown from within the async function.

因此 putText() 不会返回 retPromise() 的解析值,而是返回一个将使用该值解析的 Promise,因此您必须使用 .then(当已满时)或 .catch(当被拒绝时)来访问它。

function retPromise() {
return new Promise((resolve, reject) => resolve('Hello'));
}

async function putText() {
let result = await retPromise();
return result;
}

putText().then( result => $("#test").val(result) )
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.1/jquery.min.js"></script>
<input type="text" id="test">

关于javascript - 在异步函数中返回等待值就是返回一个 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44894835/

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