Node.js 如何在回拨中实现firebase集合请求
我是node js的新手,我想在回调函数中将信息写入firebase数据库 我一直在搜索,似乎回调是异步的。如何在此回调中使用firestoreNode.js 如何在回拨中实现firebase集合请求,node.js,firebase,asynchronous,google-cloud-firestore,google-cloud-functions,Node.js,Firebase,Asynchronous,Google Cloud Firestore,Google Cloud Functions,我是node js的新手,我想在回调函数中将信息写入firebase数据库 我一直在搜索,似乎回调是异步的。如何在此回调中使用firestore exports.registerRestaurantPayout = functions.firestore.document('*********') .onCreate(async (paymentSnap, context) => { var request = require('request'); var
exports.registerRestaurantPayout = functions.firestore.document('*********')
.onCreate(async (paymentSnap, context) => {
var request = require('request');
var authCode = paymentSnap.data().auth_code;
var firstString = 'client_secret=********&code=';
var secondString = '&grant_type=authorization_code';
var dataString = firstString + authCode + secondString;
var options = {
url: 'https://connect.stripe.com/oauth/token',
method: 'POST',
body: dataString
};
function callback(error, response, body) {
if (!error && response.statusCode === 200) {
console.log(body);
return await firestore.document('***********')
.set({'account': body}, {merge: true});
//return await paymentSnap.ref.set({'account': body}, {merge: true});
}else{
//return await paymentSnap.ref.set({'error' : error}, { merge: true });
}
}
request(options, callback);
});
我在解析错误时遇到以下错误:意外的令牌firestore,即使我可以在回调之外使用firestore。具体的问题是回调中的return语句。在云函数中,您应该使用承诺来处理异步任务(如对条带API的HTTP调用或对实时数据库的写入)。默认情况下,
request
不会返回承诺,因此您需要为请求使用接口包装器,如,并按照以下行调整代码:
const rp = require('request-promise');
exports.registerRestaurantPayout = functions.firestore.document('*********')
.onCreate((paymentSnap, context) => {
var authCode = paymentSnap.data().auth_code;
var firstString = 'client_secret=**********=';
var secondString = '&grant_type=authorization_code';
var dataString = firstString + authCode + secondString;
var options = {
method: 'POST',
uri: 'https://connect.stripe.com/oauth/token',
body: dataString,
json: true // Automatically stringifies the body to JSON
};
return rp(options)
.then(parsedBody => {
return paymentSnap.ref.set({'account': parsedBody}, {merge: true});
})
.catch(err => {
return paymentSnap.ref.set({'error' : err}, { merge: true });
});
});
我还建议您观看Firebase团队关于云功能和承诺的以下两个“必看”视频:和 在云函数中,您应该使用承诺来处理异步任务(如对条带API的HTTP调用或对实时数据库的写入)。默认情况下,
request
不会返回承诺,因此您需要为请求使用接口包装器,如,并按照以下行调整代码:
const rp = require('request-promise');
exports.registerRestaurantPayout = functions.firestore.document('*********')
.onCreate((paymentSnap, context) => {
var authCode = paymentSnap.data().auth_code;
var firstString = 'client_secret=**********=';
var secondString = '&grant_type=authorization_code';
var dataString = firstString + authCode + secondString;
var options = {
method: 'POST',
uri: 'https://connect.stripe.com/oauth/token',
body: dataString,
json: true // Automatically stringifies the body to JSON
};
return rp(options)
.then(parsedBody => {
return paymentSnap.ref.set({'account': parsedBody}, {merge: true});
})
.catch(err => {
return paymentSnap.ref.set({'error' : err}, { merge: true });
});
});
我还建议您观看Firebase团队关于云功能和承诺的以下两个“必看”视频:和 您的代码是云函数的一部分吗?如果是,请您添加云函数的全部代码好吗?@RenaudTarnec谢谢您的回复,我刚刚更新了代码,是的,它是云函数的一部分。您的代码是云函数的一部分吗?如果是,请您添加云功能的全部代码好吗?@RenaudTarnec谢谢您的回复,我刚刚更新了代码,是的,它是云功能的一部分。非常感谢,它很有效。我还要看一看视频。@RobinOlisa很高兴我能帮助你!你也可以投票决定答案,见。谢谢非常感谢,它成功了。我还要看一看视频。@RobinOlisa很高兴我能帮助你!你也可以投票决定答案,见。谢谢