在async函数中返回await'd值将返回一个promise

时间:2017-07-03 23:07:19

标签: javascript promise async-await

在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语句在异步函数范围内,所以它能够正确使用吗?

1 个答案:

答案 0 :(得分:1)

来自async_function MDN

  

返回值

     

一个Promise,它将使用async函数返回的值进行解析,或者在异步函数中抛出未捕获的异常而被拒绝。

因此putText()不会返回retPromise()的已解析值,但会返回将使用该值解析的承诺,因此您必须使用.then(填满时)或.catch(被拒绝时)访问该内容。

&#13;
&#13;
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;
&#13;
&#13;