调用get order paypal函数后,此函数出现问题。它成功获取了订单详细信息并将其写入控制台。但是,此后,它应该写入Firestore文档,但不会执行此操作。功能日志上没有错误,仅是它已启动并执行了功能。如果删除了paypal函数,则可以写入文档,因此我知道代码可以工作。我只是不知道我在搞什么。任何帮助将不胜感激,谢谢。
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
答案 0 :(得分:1)
您需要返回一个承诺,该承诺将在所有异步工作完成后解决。目前,该函数未返回任何内容,这意味着它将立即终止,并且对paypal的调用只会关闭。回调函数内部的return语句不会将承诺返回给顶层函数。
您需要做的是“ promisify”对贝宝的呼吁,因为他们目前不支持诺言(除非您想使用其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
})