javascript - 使用异步等待模式重新调整承诺,并有一些延迟
问题描述
我正在尝试从调用休息 api 的方法返回一些测试数据。为了模拟其余的 api 调用,我添加了一些延迟以使用 async-await 模式返回一个承诺,但它没有按预期工作。
我对 JavaScript 中 async-await 模式的理解是,从异步函数返回的任何值都作为 Promise 返回,因此该函数应将值 100 作为 Promise 返回,因此使用的最后一条语句.then
应显示 100,但事实并非如此.
问题
下面的代码片段有什么问题导致最后一行代码中的警报显示undefined
而不是 100?
async function f() {
function delayedResponse() {
setTimeout(function() { return 100}, 5000);
}
return await delayedResponse();
}
f().then(alert); // 100
解决方案
您没有返回任何内容,delayedResponse
因此导致undefined
.
相反,为了实现您的期望 - 您可以显式创建一个承诺并使用超时解决一个值;
async function f() {
return new Promise(resolve => {
setTimeout(function() { resolve(100)}, 5000);
});
}
f().then(alert); // 100
推荐阅读
- javascript - 用正则表达式“修复”类的所有href的Javascript
- flutter - Flutter 创建不成功
- python - 3个嵌套循环:优化简单模拟以提高速度
- javascript - Highcharts 仪表在 Firefox 中未正确显示
- protractor - 使用 localStorage.clear() 时会话或 cookie 不会被清除;或 sessionStorage.clear(); 量角器黄瓜
- image - libv4l2:打开流时出错:设备上没有剩余空间 VIDIOC_STREAMON:设备上没有剩余空间
- google-bigquery - _TABLE_SUFFIX 字符串比较与整数
- ms-access - 如何从日期变量中删除秒的分数?
- c# - 在 Reactive Stream 上发布时出现 IndexOutOfRangeException
- java - 请求中带有json数据的resttemplate postForObject抛出带有404 null的RestClientException