TypeError: res.send(...).then 不是函数

问题描述

在我的 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 会弹出这个错误

解决方法

我在文档或 source 中没有看到任何暗示 Response.send 将返回 Promise 的内容,我也没有看到任何假设它会返回的代码示例。它不是一个异步函数,它似乎在常见的成功案例中会返回 this(甚至这也没有记录)。

我想知道您过去是否“走运”,因为您一直在使用 .then(),而不是在 res.send 的特定返回值上,而是在异步函数的返回值上返回它:

async foo(res) {
  return res.send();
}

foo().then(a => console.log('this will work.'));

因为 JS 运行时会自动将 async 函数的返回值包装在一个 Promise 中,所以在使用这种模式时,您总是会得到一个 thenable 对象。

我不确定您的代码片段中的具体细节,但我相信以下内容会产生您所追求的行为:

res.send(response)
return createStripe_Accounts(uid,account);