gpt4 book ai didi

node.js - Firebase云函数多次执行

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

我有一个 Firebase (Google) 云功能,如下

// Initialize the Auth0 client
var AuthenticationClient = require('auth0').AuthenticationClient;
var auth0 = new AuthenticationClient({
domain: 'familybank.auth0.com',
clientID: 'REDACTED'
});

function getAccountBalance(app) {
console.log('accessToken: ' + app.getUser().accessToken);
auth0.getProfile(app.getUser().accessToken, function (err, userInfo) {
if (err) {
console.error('Error getting userProfile from Auth0: ' + err);
}
console.log('getAccountBalance userInfo:' + userInfo)

let accountowner = app.getArgument(PARAM_ACCOUNT_OWNER);

// query firestore based on user
var transactions = db.collection('bank').doc(userInfo.email)
.db.collection('accounts').doc(accountowner)
.collection('transactions');
var accountbalance = transactions.get()
.then( snapshot => {
var workingbalance = 0
snapshot.forEach(doc => {
workingbalance = workingbalance + doc.data().amount;
});

app.tell(accountowner + " has a balance of $" + workingbalance)
})
.catch(err => {
console.log('Error getting transactions', err);
app.tell('I was unable to retrieve your balance at this time.')
});
});
}
actionMap.set(INTENT_ACCOUNT_BALANCE, getAccountBalance);
app.handleRequest(actionMap);

执行时,我看到以下日志

enter image description here

请注意,该函数的某些部分被执行了多次,并且第二次执行失败。如果我在记录 userInfo 后关闭 auth0.getProfile 调用,则该函数可以工作,但显然没有 userInfo

知道为什么这个函数的某些部分会多次执行以及为什么某些调用会失败吗?

最佳答案

userInfo 在第 (2) 点未定义,因为出现错误(在其正下方的行上报告,这是上一条记录的消息)。您的错误 block 不会离开该函数,因此它会继续使用无效的 userInfo 对象运行。

但这并不能解释为什么回调被调用两次 - 一次使用有效的userInfo,一次使用errAuthenticationClient.getProfile() 的文档(尽管不是示例)表明它返回一个 Promise(或未定义 - 尽管它没有说明为什么它可能返回>未定义),所以我想知道这是否最终会调用回调两次。

由于它返回一个 Promise,因此您可以省略回调函数,只需使用如下方式处理它:

function getAccountBalance(app) {
let accountowner = app.getArgument(PARAM_ACCOUNT_OWNER);
console.log('accessToken: ' + app.getUser().accessToken);
var accessToken = app.getUser().accessToken;
auth0.getProfile( accessToken )

.then( userInfo => {
console.log('getAccountBalance userInfo:' + userInfo)

// query firestore based on user
var transactions = db.collection('bank').doc(userInfo.email)
.db.collection('accounts').doc(accountowner)
.collection('transactions');
return transactions.get();
})

.then( snapshot => {
var workingbalance = 0
snapshot.forEach(doc => {
workingbalance = workingbalance + doc.data().amount;
});

app.tell(accountowner + " has a balance of $" + workingbalance)
})

.catch( err => {
console.error('Error:', err );
app.tell('I was unable to retrieve your balance at this time.')
})

});
}

关于node.js - Firebase云函数多次执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48118881/

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