gpt4 book ai didi

javascript - 为什么 'await'不等待?

转载 作者:行者123 更新时间:2023-11-28 14:26:44 24 4
gpt4 key购买 nike

我是 Javascript 中的等待/异步函数的新手。我编写了以下函数:

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 结果)。

但是,我不明白的是,当我调用该函数时,我希望它等到 promise 返回后再继续。但是,事实并非如此。当我调用该函数时,程序立即运行下一行(控制台的日志)而无需等待:

async startProcess() {
const googleResults = await this.getGoogleResults();
console.log(googleResults); // this gets run immediately, produces 'undefined' in console
}

控制台记录的内容是“未定义”。所以,显然,我做错了什么,但我找不到一个例子来说明这可能是什么。这就像程序调用了函数,但立即继续前进,而不等待 promise 。

编辑:我知道我的函数此时只是返回 data.contents,而不是解析后的 Div。我此时只是进行测试,希望在调用异步函数后查看结果。

最佳答案

您需要返回Promise来自函数 getGoogleResults

的对象
getGoogleResults = () => { // You don't need the async keyword here
return new Promise((resolve, reject) => {
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
resolve(data.contents); // Use the function resolve.
});

// Use the function reject for any errors.
});
}

关于javascript - 为什么 'await'不等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53011886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com