在我的index.js
内部,我有一个函数的结尾如下:
return res.send(response).then(saveProductID(uid, product.id));
在Firebase控制台中,它说:
TypeError:res.send(…(.then不是函数
完整代码示例:
exports.createConnectAccount = functions.https.onRequest(async (req, res) => {
var data = req.body
console.log(data, "<-- clark jable")
var uid = data.userID
console.log(uid, "<-- this is the uid")
var email = data.email
var response = {}
strip.accounts.create({
type: 'express',
country: 'US',
requested_capabilities: [
'transfers',
],
business_type: 'individual',
},
(err, account) => {
if (err) {
console.log("Couldn't create stripe account: " + err)
return res.send(err)
}
// createStripe_customers(uid, customer, intent)
console.log("ACCOUNT: " + account.id)
response.body = {
success: account.id
}
//createStripe_customers()
return res.send(response).then(createStripe_Accounts(uid, account));
}
);
});
function createStripe_Accounts(uid, account) {
console.log(uid, " did the createStripe_Accounts Run? ", account.id)
const userRef = admin.database().ref('Stripe_Accounts').child(uid) //.child(uid)
return userRef.set({
account_id: account.id,
});
}
.then()
以前(并将继续(为许多其他功能工作为什么createConnectAccount
会出现此错误
我在文档或源代码中没有看到任何暗示Response.send将返回Promise的内容,也没有看到任何假设它会返回Promise。它不是一个异步函数,在常见的成功案例中,它似乎会返回this
(甚至这一点没有记录(。
我想知道你是不是";运气好";在过去使用.then()
不是针对res.send
的特定返回值,而是针对返回它的异步函数的返回值:
async foo(res) {
return res.send();
}
foo().then(a => console.log('this will work.'));
因为JS运行时会自动将async
函数的返回值包装在Promise中,所以在使用此模式时,您总是会得到一个合适的对象。
我不确定您的代码片段中的具体内容,但我相信以下内容将具有您想要的行为:
res.send(response)
return createStripe_Accounts(uid, account);