【问题标题】:TypeError: Cannot read property 'then' of undefined. Getting this error when I am trying to run updatefirst functionTypeError:无法读取未定义的属性“then”。当我尝试运行 updatefirst 函数时出现此错误
【发布时间】:2020-06-24 20:44:13
【问题描述】:

我正在尝试运行 updatefirst 函数,但即使我将预定义的值传递给 get_plo_amount 中的 resolve 函数,我也会一次又一次地遇到相同的错误。console.log(result) 行运行表明没有问题获取数据。我不知道我在这里做错了什么:(。任何帮助将不胜感激。谢谢。

const get_plo_amount = function(p){
    plo.findOne({phone : p}).then((result) => {
        console.log(result) //this line is running
        return new Promise((resolve,reject) => {
            resolve(result.daily_amount)
        })

    }).catch((e) => {
        console.log("catch")
        return new Promise((resolve,reject) => {
            reject(e)
        })
    })

}

//updatefirst
const updatefirst = function(plo,date){
    driver.find({associated_plo : plo}).then((result) => {
        //console.log(result)//delete this
        get_plo_amount(plo).then((amount) => {
            console.log(amount)
            var arr
            for(i=0;i<result.length;i++){
                var pdue = parseInt(result[i].balance) + amount
                var d_obj = {
                    driver : result[i].name,
                    phone : result[i].phone,
                    auto_number : result[i].auto_number,
                    amount : pdue,
                }
             //   console.log(d_obj)//delete this
                arr[i] = d_obj
            }

            const obj = {
                associated_plo : plo,
                date : date,
                earning : "0",
                payments : arr
            }
            const t = new transactions(obj)

            t.save().then(() => {
                return "success"
            }).catch((e) => {
                return e
            })

        }).catch((e) => {
            console.log(e)
            return e
        })


    }).catch((e) => {
        console.log(e)
        return e
    })
}

【问题讨论】:

  • 能否请您在问题中添加整个错误消息?您可以编辑问题以添加详细信息。

标签: javascript node.js mongodb asynchronous promise


【解决方案1】:

您应该返回一个承诺,以使then() 方法工作。 尝试像这样更新您的函数:

const get_plo_amount = function(p){
    return plo.findOne({phone : p}).then((result) => {
        console.log(result) //this line is running
        return new Promise((resolve,reject) => {
            resolve(result.daily_amount)
        })

    }).catch((e) => {
        console.log("catch")
        return new Promise((resolve,reject) => {
            reject(e)
        })
    })

}

【讨论】:

  • 非常感谢!
【解决方案2】:

还有 2 处变化

  1. 您可以返回 result.daily_amount 而无需创建另一个承诺
  2. catch 中的 promise 被拒绝,所以你最好删除 catch
const get_plo_amount = function(p){
    return plo.findOne({phone : p}).then((result) => {
        console.log(result) //this line is running
        result.daily_amount;
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2019-08-19
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2019-03-25
    相关资源
    最近更新 更多