Javascript Firebase云函数在使用paypal sdk后无法编写文档

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

在调用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

您需要返回一个承诺,该承诺在所有异步工作完成时解析。现在,该函数没有返回任何内容,这意味着它将立即终止,对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测试版看起来很不错,哈哈,我会尝试一下,但在花了我所有的时间让它工作后,我可能会坚持你的修正版本。谢谢你的帮助。