gpt4 book ai didi

javascript - 等待javascript中的异步调用不会在Node js中进行console.log

转载 作者:行者123 更新时间:2023-11-29 10:28:32 24 4
gpt4 key购买 nike

几个小时以来,我一直在阅读有关 promises 的内容,现在我正在失去理智。根据我在 SO 中阅读的内容和谷歌上的文章。要在变量中获取响应值,我必须使用异步和等待。所以走那条路我写了这段代码:

async function getZpid() {

let response = await function getZillowZpid(){
zillow.get('GetSearchResults', parameters)
.then(results => {
let zpidResponse = results.response.results.result[0].zpid;
console.log("i ran");
return zpidResponse;
});
}

}

getZpid();

在这里,我希望当 getZpid() 运行时,“响应”将等待函数 get ZillowZpid 完成。一旦完成,它将 console.log “我跑了”,然后返回 zpidResponse。

我没有收到任何错误,但 console.log 从未出现。最终 console.log 只是一个测试,我想做的是将 zpidResponse 放入一个我可以在函数外使用的变量。任何帮助将不胜感激!

最佳答案

您使用 await function getZillowZpid() 定义了一个您从未调用过的无关函数。这就是您看不到任何错误或结果的原因。如果您在上面的函数中记录变量 response,您将看到它是 [Function: getZillowZpid],您已经定义了一个函数并将其分配给 response 这肯定不是你想要的。

因为 zillow.get 返回一个 promise ,你可以等待它。下面是一个模拟 zillow 对象的示例:

// fake the zillow object
let zillow = {
get() {
return Promise.resolve({response: {results: {result: [{zpid: "Some data"}]}}})
}
}

async function getZpid() {
let parameters = {}
// zillow.get returns a promise, you can use await to get the returned value
let response = await zillow.get('GetSearchResults', parameters)
.then(results => {
let zpidResponse = results.response.results.result[0].zpid;
console.log("i ran");
return zpidResponse;
});

console.log(response)
}

getZpid();

仅供引用,如果您使用的是 async/await,那么避免使用 then() 会更干净,但您仍然应该添加一些错误检查:

// fake zillow
let zillow = {
get() {
return Promise.resolve({response: {results: {result: [{zpid: "Some data"}]}}})
}
}
async function getZpid() {
let parameters = 0
let response = await zillow.get('GetSearchResults', parameters)
let zpidResponse = response.response.results.result[0].zpid;
console.log(zpidResponse)
return zpidResponse
}

getZpid();

关于javascript - 等待javascript中的异步调用不会在Node js中进行console.log,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52340094/

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