使用贝宝sdk

时间:2019-10-11 16:22:34

标签: javascript firebase paypal google-cloud-firestore google-cloud-functions

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

1 个答案:

答案 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
})