节点的promisify无法与基于回调的功能一起使用

时间:2018-09-20 06:48:13

标签: node.js promise es6-promise

我有一个执行一些异步处理的函数,我想将其转换为一个Promise,以便以后可以与其他依赖函数建立“执行链”。

下面是代码(出于隐私目的略有修改):

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

问题在于,在最后一行,承诺永远不会解决,因此请求-响应周期永远不会结束。不知道我在设置中做错了什么。任何帮助表示赞赏。

0 个答案:

没有答案