Обещание узла не работает с функцией обратного вызова - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть функция, которая выполняет некоторую асинхронную обработку, и я хочу преобразовать ее в обещание, чтобы позже я могла создать «цепочку выполнения» с другими зависимыми функциями.

Ниже приведенкод (слегка измененный для конфиденциальности):

router.get('/api/prx/ptr', function(req, res) {
    let prx = req.params.prx_id
    let ptr = {}    

    let parse_text = (idx_array, prx) => {
        for(let name of idx_array) {
            if (typeof ptr[name] === 'undefined') {
                ptr[name] = []
            }
            get_text(prx, name, (tg) => {
                const pst = new Set(tg.ph.map(ps => ps.label))
                pst.forEach(ps => {
                    ptr[name].push(ps)
                })
            })
        }
        return true
    }

    parse_text = promisify(parse_text)

    documentExists(prx, function(err, dbexists){
        if (err) {
            console.log(err);
            return res.status(404).send(err)
        }

        get_idx_array(prx, function(err, idx_array){
            if (err) {
                return res.status(err.code || 400).send(err)
            }

            idx_array = idx_array.map(function(v){return v._id});

            parse_text(idx_array, prx)
            .then(result => {
                res.status(200).send(ptr)
            })
        })
    })
})

Проблема в том, что в последней строке обещание никогда не разрешается и, таким образом, цикл запрос-ответ никогда не заканчивается.Не уверен, что я сделал неправильно в моей настройке.Любая помощь приветствуется.

...