【发布时间】:2018-10-26 23:30:53
【问题描述】:
我是 Javascript 中的 await/async 函数的新手。我写了以下函数:
getGoogleResults = async () => {
const googleResultUrl = 'http://www.google.com/search?q=bakery&num=60');
// get only Divs within results that have class of 's'
$.getJSON(googleResultUrl, (data) => {
const results = $(data.contents).find('div[class="g"]');
const divs = results.find('div[class="s"]');
console.log(data.contents); // data logged here looks fine in console
return data.contents;
});
}
此功能运行良好,我可以将响应注销到控制台并查看解析出的数据(前 60 个 Google 结果)。
但是,我不明白的是,当我调用该函数时,我希望它等到承诺返回后再继续。但是,事实并非如此。当我调用该函数时,程序会立即运行下一行(到控制台的日志),而无需等待:
async startProcess() {
const googleResults = await this.getGoogleResults();
console.log(googleResults); // this gets run immediately, produces 'undefined' in console
}
记录到控制台的内容是“未定义”。所以,很明显,我做错了什么,但我找不到一个例子来说明那可能是什么。就像程序调用了函数,但没有等待承诺就立即继续。
编辑:我知道我的函数此时只是返回 data.contents,而不是解析的 Div。我现在只是在测试,想在调用 async 函数后查看结果。
【问题讨论】:
-
你没有从
getGoogleResults返回任何东西,所以awaiting它的结果是undefined。 -
'return data.contents' 语句不返回一些东西吗?
-
return声明 inside$.getJSON()回调没有做任何有用的事情,特别是它不会影响您的async函数的返回值. -
当然可以,但它不会影响外部函数
getGoogleResults,它不会返回任何内容。 -
如果 $ 是 jquery 你不需要像答案建议的那样返回新的承诺。只需返回 $.getJSON()
标签: javascript asynchronous async-await