我已经读了几个小时的承诺,我在这里失去了理智。根据我在SO中阅读的内容和谷歌上的文章。要获取变量中的响应值,我必须使用async和await。所以走了那条路我写了这段代码:
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
返回一个承诺,你可以等待它。这是一个模拟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();