Javascript 返回等待';异步函数中的d值正在返回承诺

Javascript 返回等待';异步函数中的d值正在返回承诺,javascript,promise,async-await,Javascript,Promise,Async Await,在Javascript中,我试图从异步函数返回等待的结果。如果我在异步函数中使用这个结果,那么一切都会正常工作,它会被视为resolve()参数,一切都很好。但是,如果我尝试返回结果,它将被视为回调,即使有wait语句 例如(在异步函数中使用等待结果): 函数retPromise(){ 返回新承诺((resolve,reject)=>resolve('Hello'); } 异步函数putText(){ 让结果=等待重新承诺(); $(“#测试”).val(结果); } putText();

在Javascript中,我试图从异步函数返回等待的结果。如果我在异步函数中使用这个结果,那么一切都会正常工作,它会被视为resolve()参数,一切都很好。但是,如果我尝试返回结果,它将被视为回调,即使有wait语句

例如(在异步函数中使用等待结果):


函数retPromise(){
返回新承诺((resolve,reject)=>resolve('Hello');
}
异步函数putText(){
让结果=等待重新承诺();
$(“#测试”).val(结果);
}
putText();
与返回值并在异步函数外部使用它相比:


函数retPromise(){
返回新承诺((resolve,reject)=>resolve('Hello');
}
异步函数putText(){
让结果=等待重新承诺();
返回结果;
}
$(“#测试”).val(putText());
为什么等待在第一把小提琴中正确地返回已执行的承诺,而不是在第二把小提琴中?是因为jquery语句位于异步函数作用域内,所以可以正确使用它吗

来自:

返回值

将使用异步函数返回的值解析的承诺,或使用异步函数内引发的未捕获异常拒绝的承诺

因此,
putText()
不会返回
retPromise()
的解析值,而是返回一个将使用该值解析的承诺,因此您必须使用
。然后使用
(完全填充时)或
。catch
(拒绝时)访问该值

函数retPromise(){
返回新承诺((resolve,reject)=>resolve('Hello');
}
异步函数putText(){
让结果=等待重新承诺();
返回结果;
}
putText().then(result=>$(“#test”).val(result))


是的,因为
async/await
仅仅是承诺的语法糖-标记为async的函数保证返回承诺-实际上,您的第二个
putText
函数是
function putText(){return retPromise();}
-尽管实际上,它要复杂得多
异步函数
总是返回一个承诺-它必须这样做,因为它不能神奇地同步执行异步内容并立即从未来返回结果。
立即从未来返回结果
-如果可以,我会为乐透号码创建一个承诺:p
<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();
<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());