簡體   English   中英

類型錯誤:無法讀取未定義的屬性“then”。 當我嘗試運行 updatefirst 函數時出現此錯誤

[英]TypeError: Cannot read property 'then' of undefined. Getting this error when I am trying to run updatefirst function

我正在嘗試運行 updatefirst 函數,但即使我將預定義的值傳遞給 get_plo_amount 中的解析函數時,也會一次又一次地得到相同的錯誤。 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
    })
}

您應該返回一個承諾,以使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 個變化

  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;
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM