【发布时间】:2020-04-12 09:24:08
【问题描述】:
我刚开始学习 Javascript 中的Promises,碰巧遇到了async/await。
据我了解,如果我指定一个函数为async,javascript 将始终包装我的函数内容并返回Promise,而不是我返回的任何内容。
让我们假设以下场景:
async function httpRequest() {
oReq = new XMLHttpRequest();
oReq.addEventListener("load", function() {
return this.responseText;
});
oReq.open("GET", "http://some.url.here");
oReq.send();
}
httpRequest().then(function(httpResult) {
console.log(httpResult);
});
我是否正确假设上述情况不起作用,因为httpRequest() 没有返回任何东西,XMLHttpRequest 的回调只返回一些东西,因此我的结果很可能是undefined?
如果是,我将如何修复 httpRequest() 以便它可以在 async/await 场景中工作?
【问题讨论】:
-
httpRequest()不需要标记为async,因为它不是await任何东西。如果您返回异步操作,那么您可以在单独的async函数中执行await httpRequest()。 -
它被标记为
async,以便我可以在下一行中then。我想使用语言功能,它自动将我的函数包装为Promise,而不是我必须返回Promise -
你不需要
async来使用then(),你只需要以一种或另一种方式返回一个承诺。您可以返回该承诺,或者如果您更愿意保留它async,则返回 awaited 承诺(本质上是接受一个承诺,用await解开它,然后重新包装它)。
标签: javascript async-await es6-promise