gpt4 book ai didi

node.js - Node JS 函数未执行。可能是什么原因?

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:43 25 4
gpt4 key购买 nike

我想使用 Firebase Cloud Functions 捕获付款并立即创建付款转账。捕获正确进行,但传输未执行。可能是什么原因?

引用文档:https://github.com/razorpay/razorpay-node/blob/master/examples/index.js

以下是我的 Firebase Cloud Function 的源代码:

   exports.CapturePayment = functions.database.ref('payment_id').onWrite((event) => {

const payment_id = event.data.val();

// Capture a particular payment
rzp.payments.capture(payment_id, 100000).then((data) => {

return event.data.ref.child('status').set(data);
console.log(data);

// Create transfers on a payment
rzp.payments.transfer(payment_id, {
transfers: [
{
account: 'acc_aldsfkas123123adsf',
amount: 100,
currency: 'INR'
}
]
}).then((data) => {
var db = admin.database();
var ref = db.ref("transfer");
return ref.update("Success");
console.log(data)

}).catch((error) => {
var db = admin.database();
var ref = db.ref("transfer");
return ref.update("Failure");
console.error(error)
})

// success
}).catch((error) => {
console.log(error);

// error
})

});

最佳答案

如果您想在初始调用中返回数据,同时也进行传输,只需将其更改为以下内容:

// Capture a particular payment
rzp.payments.capture(payment_id, 100000).then((data) => {
const ret = event.data.ref.child('status').set(data);
console.log(data)

// Create transfers on a payment
rzp.payments.transfer(payment_id, {
transfers: [
{
account: 'acc_aldsfkas123123adsf',
amount: 100,
currency: 'INR'
}
]
})

return ret
})

问题是您在运行传输函数之前使用了return。一旦按下return,其后面的代码将永远不会运行。通过将所需的返回值存储在变量中,您可以执行其他工作,然后返回它。

或者,您可以以不同的顺序运行代码,因为这两个调用看起来并不相互依赖。

<小时/>

实际上,您应该将所有异步工作分解为单一服务和可理解的函数,这些函数可以链接在一起以获得更好的可读性。例如,您的链可能如下所示:

capturePayment(payment_id, 100000)
.then(updateDB)
.then(transfer)
.then(data => console.log('success'))
.catch(err => console.error(err))

然后您必须确保每个链接函数都采用一个参数,该参数可以从前一个函数的结果传递。

关于node.js - Node JS 函数未执行。可能是什么原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50461068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com