fetch()请求返回待处理的Promise,而不是最终值

时间:2019-09-20 09:00:42

标签: javascript node.js asynchronous fetch es6-promise

我让我的内裤在关于异步性,承诺和获取请求的问题上有所改变。

我正在尝试从获取请求中获取数据,这很简单,但是在运行时,我得到的只是“承诺{pending}”。我已经阅读了10个答案,这些答案似乎与我的非常相似,但似乎无济于事。

当我在最终的then()中使用console.log(data.formatted_address)时,得到的结果就很好(在待处理的Promise之后),但是当我刚返回它时,最后的结果中只有“ Promise {pending}” console.log。任何帮助将不胜感激!

const fetch = require('node-fetch');
const dotenv = require('dotenv');
dotenv.config();

function getCoordinates(address) {
  let searchAddress = address.split(" ").join("+");
  let url =
    "https://maps.googleapis.com/maps/api/geocode/json?address=" +
    searchAddress +
    "&key=" + process.env.GOOGLE_API;
  return fetch(url)
    .then(response => response.json())
    .then(data => data.results[0].formatted_address)
}

let a = getCoordinates("Buckingham Palace, London")

console.log(a)

编辑:

如果您想在家中尝试,这是一个没有API调用的简单得多的版本!

function getCoordinates() {
  var promiseTest = new Promise(function(resolve, reject) {
    if (1 + 1 === 2) {
      resolve('pass')
    } else {
      reject('fail')
    }
  })
  return promiseTest.then(data => data);
}

console.log(getCoordinates())

进一步编辑:

所以我认为我在考虑Promises&Asynchronicity错误。我需要做一些阅读。我将不使用异步函数,而只是扩展我的诺言以包括回调。但是,谢谢大家的帮助!

2 个答案:

答案 0 :(得分:0)

尝试一下:

function getCoordinates(address) {
  let searchAddress = address.split(" ").join("+");
  let url =
    "https://maps.googleapis.com/maps/api/geocode/json?address=" +
    searchAddress +
    "&key=" + 'your key'
    return fetch(url);
}

getCoordinates('Buckingham Palace, London').then(res => res.json()).then(data => {
  console.log(data)
})

答案 1 :(得分:0)

如果您想获得Promise的结果,就好像它是同步呼叫一样,则需要使用async/await

简化的示例可能是这样的:

const obj = {...this.success,...success.json()};

注意:异步/等待在Internet Explorer上不起作用