【发布时间】:2019-10-17 23:37:59
【问题描述】:
我正在开发一个应用程序,我想将我的用户坐标从 firestore 发送到 locationiq.com 以获取详细信息,然后将其写入 firestore 我正在使用 firebase 云功能发出 GET 请求,但我认为它失败了 有人可以帮我写代码吗
我收到了这个错误
Function returned undefined, expected Promise or value
const functions = require('firebase-functions');
const request = require('request');
const admin = require ('firebase-admin');
admin.initializeApp();
// Create and Deploy Your First Cloud Functions.
// https://firebase.google.com/docs/functions/write-firebase-functions
exports.geoCoder = functions.firestore
.document('geocoder/{location}').onCreate((snap, context) => {
const latitude = snap.data().coordinate.latitude;
const longtude = snap.data().coordinate.longtude;
var part1 = "https://us1.locationiq.com/v1/reverse.php?key=XXXXXXXXXXXXXX&lat=";
var part2 = "&lon="
var part3 = "&format=json"
request(part1 + latitude + part2 + longtude + part3, { json: true }, (err, res, body) => {
if (err) {
console.log(err);
}
console.log(body.address);
});
});
更新我面临同样的错误。
const functions = require('firebase-functions');
const request = require('request');
const admin = require ('firebase-admin');
admin.initializeApp();
exports.geoCoder = functions.firestore.document('geocoder/{location}').onCreate((snap, context) => {
const latitude = snap.data().coordinate.latitude;
const longtude = snap.data().coordinate.longtude;
var part1 = "https://us1.locationiq.com/v1/reverse.php?key=XXXXXXXXXXXXXX&lat=";
var part2 = "&lon="
var part3 = "&format=json"
request(part1 + latitude + part2 + longtude + part3, { json: true }, (err, res, body) => {
if (err) {
console.log(err);
return 0;
}
return admin.firestore().doc("geocoder/" + context.params.location).update({city: body.address.state})
});
});
对不起我的英语
【问题讨论】:
-
您需要返回一个承诺,当您的函数中的所有异步工作完成时,该承诺会解决。理解 Promise 对于使用 JavaScript 和 Cloud Functions 是绝对必要的。 firebase.google.com/docs/functions/video-series
-
嘿,我看过你的视频 XD,但我遇到了同样的错误,所以我用新代码更新了我的答案,你能告诉我问题出在哪里吗。
-
您的代码仍未返回承诺。您有一个返回承诺的内部回调,但顶级函数仍然没有返回任何内容。
标签: javascript node.js firebase google-cloud-firestore google-cloud-functions