Javascript Firebase云函数在使用paypal sdk后无法编写文档
在调用get order paypal函数后,我发现这个函数有问题。它成功获取订单详细信息并将其写入控制台。然而,在这之后,它应该写入Firestore文档,但它不会这样做。函数日志中没有错误,只是它启动并执行了函数。如果我删除paypal函数,它就可以写入文档,这样我就知道代码是有效的。我只是不知道我搞砸了什么。任何帮助都将不胜感激,谢谢Javascript Firebase云函数在使用paypal sdk后无法编写文档,javascript,firebase,paypal,google-cloud-firestore,google-cloud-functions,Javascript,Firebase,Paypal,Google Cloud Firestore,Google Cloud Functions,在调用get order paypal函数后,我发现这个函数有问题。它成功获取订单详细信息并将其写入控制台。然而,在这之后,它应该写入Firestore文档,但它不会这样做。函数日志中没有错误,只是它启动并执行了函数。如果我删除paypal函数,它就可以写入文档,这样我就知道代码是有效的。我只是不知道我搞砸了什么。任何帮助都将不胜感激,谢谢 const functions = require('firebase-functions'); // Import and initialize the
const functions = require('firebase-functions');
// Import and initialize the Firebase Admin SDK.
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const paypal = require('paypal-rest-sdk');
paypal => configured here
exports.createRecord = functions.firestore.document('messages/{messageId}').onCreate(
async (snapshot) => {
var orderId = "3L62701538009611M";
paypal.order.get(orderId, function (error, order) {
if (error) {
console.log(error);
return false;
} else {
console.log("Get Order Response",JSON.stringify(order));
var userObject = {
displayName : 'BarryAllen',
email : 'FMA@Speedster.com',
};
return admin.firestore().doc('paid/docnametest').set(userObject)
}
});
});
函数日志
5:25:50.643 PM
checkWork
Function execution took 3559 ms, finished with status: 'ok'
5:25:47.516 PM
createRecord
Function execution took 236 ms, finished with status: 'ok'
5:25:47.281 PM
createRecord
Function execution started
5:25:47.085 PM
checkWork
Function execution started
您需要返回一个承诺,该承诺在所有异步工作完成时解析。现在,该函数没有返回任何内容,这意味着它将立即终止,对paypal的调用将关闭。回调函数中的return语句没有向顶级函数返回承诺 你需要做的是打电话给贝宝,因为他们目前不支持承诺,除非你想使用他们的2.0测试版 如果您承诺,它将看起来像这样,您可能希望根据您真正想要对paypal的响应进行的更改:
const p = new Promise((resolve, reject)) => {
paypal.order.get(orderId, function (error, order) {
if (error) {
console.log(error);
reject(error);
} else {
console.log("Get Order Response",JSON.stringify(order));
resolve(order);
}
}
})
return p.then(order => {
var userObject = {
displayName : 'BarryAllen',
email : 'FMA@Speedster.com',
};
return admin.firestore().doc('paid/docnametest').set(userObject).then
})
非常感谢你。在过去的两天里,我一直在为这件事伤脑筋。他们的2.0测试版看起来很不错,哈哈,我会尝试一下,但在花了我所有的时间让它工作后,我可能会坚持你的修正版本。谢谢你的帮助。