繁体   English   中英

javascript中的等待异步调用在Node js中没有console.log

[英]Await Async call in javascript doesn't console.log in Node js

我已经阅读了几个小时的承诺,在这里我失去了理智。 根据我在 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 "i ran" 然后返回 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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM