我让我的内裤在关于异步性,承诺和获取请求的问题上有所改变。
我正在尝试从获取请求中获取数据,这很简单,但是在运行时,我得到的只是“承诺{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错误。我需要做一些阅读。我将不使用异步函数,而只是扩展我的诺言以包括回调。但是,谢谢大家的帮助!
答案 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上不起作用