使用异步等待模式重新调整承诺,但有一些延迟
retuning a promise using async await pattern with some delay
我正在尝试 return 来自调用 rest api 的方法的一些测试数据。为了模拟剩余的 api 调用,我在 return 使用异步等待模式的承诺中添加了一些延迟,但它没有按预期工作。
我对 JavaScript 中的异步等待模式的理解是,从异步函数 returned 的任何值都是 returned 作为承诺,因此值 100 应该是 return作为函数的承诺,因此最后一个使用 .then
的语句应该显示 100,但它不是。
问题
下面的代码片段有什么问题导致最后一行代码中的警报显示 undefined
而不是 100?
async function f() {
function delayedResponse() {
setTimeout(function() { return 100}, 5000);
}
return await delayedResponse();
}
f().then(alert); // 100
你没有 return 任何东西 delayedResponse
所以它导致 undefined
.
相反,为了实现您的期望 - 您可以显式创建 promise 并使用超时解析值;
async function f() {
return new Promise(resolve => {
setTimeout(function() { resolve(100)}, 5000);
});
}
f().then(alert); // 100
我正在尝试 return 来自调用 rest api 的方法的一些测试数据。为了模拟剩余的 api 调用,我在 return 使用异步等待模式的承诺中添加了一些延迟,但它没有按预期工作。
我对 JavaScript 中的异步等待模式的理解是,从异步函数 returned 的任何值都是 returned 作为承诺,因此值 100 应该是 return作为函数的承诺,因此最后一个使用 .then
的语句应该显示 100,但它不是。
问题
下面的代码片段有什么问题导致最后一行代码中的警报显示 undefined
而不是 100?
async function f() {
function delayedResponse() {
setTimeout(function() { return 100}, 5000);
}
return await delayedResponse();
}
f().then(alert); // 100
你没有 return 任何东西 delayedResponse
所以它导致 undefined
.
相反,为了实现您的期望 - 您可以显式创建 promise 并使用超时解析值;
async function f() {
return new Promise(resolve => {
setTimeout(function() { resolve(100)}, 5000);
});
}
f().then(alert); // 100