在Javascript中,我试图从异步函数返回await'd结果。似乎我在异步函数中使用该结果然后一切正常,它被视为resolve()参数,一切都很好,花花公子。但是,如果我尝试返回结果,它将被视为回调,即使await语句存在。
例如(在async func中使用await'd结果): 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());
await如何在第一个小提琴中正确地返回已执行的承诺,而不是在第二个?是因为jquery语句在异步函数范围内,所以它能够正确使用吗?
答案 0 :(得分:1)
返回值
一个Promise,它将使用async函数返回的值进行解析,或者在异步函数中抛出未捕获的异常而被拒绝。
因此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) )
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.1/jquery.min.js"></script>
<input type="text" id="test">
&#13;