[英]how to make get request firebase cloud functions
我正在開發一個應用程序,我想將我的用戶坐標從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})
});
});
抱歉我的英語
正如Doug在上面的評論中所解釋的那樣,你需要返回一個Promise。
您正在使用的request
庫本身支持回調接口,但不返回承諾 。
您可以使用request-promise
( https://github.com/request/request-promise )和“返回常規Promises / A +兼容承諾”的rp()
方法,然后按如下方式調整代碼:
const functions = require('firebase-functions');
const admin = require ('firebase-admin');
const rp = require('request-promise');
admin.initializeApp();
exports.geoCoder = functions.firestore
.document('geocoder/{location}')
.onCreate((snap, context) => {
const latitude = snap.data().coordinate.latitude;
const longtude = snap.data().coordinate.longtude;
const part1 =
'https://us1.locationiq.com/v1/reverse.php?key=XXXXXXXXXXXXXX&lat=';
const part2 = '&lon=';
const part3 = '&format=json';
const options = {
uri: part1 + latitude + part2 + longtude + part3,
json: true // Automatically parses the JSON string in the response
};
return rp(options)
.then(parsedBody => {
return admin
.firestore()
.doc('geocoder/' + context.params.location)
.update({ city: parsedBody.address.state });
})
.catch(err => {
console.log(err);
return null;
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.