如何使用async/await返回Ajax结果?

16

我正在尝试学习async/await,我在Chrome中尝试了以下代码:

async function f() { 
     return await $.get('/');
};
var result = f();

但是result并不保存结果(字符串),而是保存了一个需要再次等待的Promise。这段代码确实给了我响应字符串:

var response = await $.get('/');

如何使用await从函数中返回实际的响应字符串?


1
async/await并不能神奇地解决异步函数返回的问题。在某个地方,你仍然需要等待结果。在这种情况下,你需要在result上使用.then() - Kevin B
3
"var result = await f();"将能够正常工作。 - Alexander Goncharov
3个回答

34

任一

function f() { 
  return $.get('/');
};

async test() {
  var x = await f()
  console.log(x)
}

test()
或者
f().then(function(res) {
    console.log(res)
}

async/await是一种编写相同逻辑的另一种方式。


那么我在f()中加入的额外的await是做什么用的呢? - user3599803
@user3599803 你是什么意思? - messerbill
在我的上面的代码中,我在f()函数里写了 return await $.get('/');,这个await是无用的吗? - user3599803
1
是的,当您调用f()方法时,此等待没有任何效果。如果您想在f()内部编写更多代码行,则您的等待将有意义:f() {let res = await $.get('/'); console.log(res)}; - messerbill

6

awaitasync基本上只是在Promise的基础上添加了一些语法糖。如果最终得到的结果还是一个Promise,你仍然需要像处理Promise一样对待它。

const response = f().then(() => { });

如果你在异步函数中调用它,你可以使用await来解决它:

async function main() {
  const response = await f();
  console.log(response);
}

我喜欢使用一种模式,即将我的主要代码放在一个自执行的异步函数中,以便我仍然可以使用await:
(async () => {
  const result = await doSomething();
  console.log(result);
})();

请注意,即使有这个模式,我仍然需要一个最终的catch()来捕获任何未被捕获的错误。
(async () => {
  // blah blah
})().catch(() => {});

-1
异步函数的返回类型是 Promise。您需要使用 await 或 then() 方法来获取结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接