在 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());
为什么等待在第一个小提琴中正确返回执行的承诺,但在第二个小提琴中却没有正确返回?是否因为jquery语句位于异步函数范围内,所以它可以正常使用?
From async_function MDN :
返回值
一个 Promise,将使用异步函数返回的值进行解析,或者通过从异步函数内部抛出未捕获的异常来拒绝。
So putText()
不返回解析值retPromise()
但返回一个将用该值解析的承诺,因此您必须使用.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">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)