微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。