TypeError: Невозможно прочитать свойство 'then' из undefined. Получение этой ошибки, когда я пытаюсь запустить функцию updatefirst - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь запустить функцию 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
    })
}

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Вы должны вернуть обещание, чтобы метод 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)
        })
    })

}
0 голосов
/ 13 марта 2020

2 дополнительных изменения

  1. вы можете вернуть result.daily_amount без создания другого обещания
  2. обещание в улове отклоняется, поэтому вы также можете удалить улов
const get_plo_amount = function(p){
    return plo.findOne({phone : p}).then((result) => {
        console.log(result) //this line is running
        result.daily_amount;
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...