node.js - node Promise的问题
迷茫
迷茫 2017-04-17 15:27:47
0
3
352
function getNode(subjectId, nodeId){
    
    request(`http://hr.amiaodaifu.com:50000/1610/questions/${subjectId}/get-children/${nodeId}`, (err, res, body) => {
        console.log(body)
        if(err){
            return console.log("err: ",err)
        } else {
            const content = JSON.parse(body); 
            console.log(content)
            return content.length == 0 ? Promise.resolve(content) : Promise.resolve({
                id: nodeId,
                children: JSON.parse(body)
            })
        }
    })
}

function getTree(subjectId, nodeId){

    getNode(subjectId, nodeId)
        .then(items => {
            return Promise.map(items.children, item => (getTree(item)))
        })
        // .then((children) => ({
        //     id: nodeId,
        //     children
        // }))
}

调用getTree的时候,提示的错误是:

Cannot read property 'then' of undefined

是我的思路有问题吗?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

reply all(3)
大家讲道理

First of all, the return value of request is not Promise.
Secondly, your getNode method does not return the result of request.

You can change it like this:

function getNode(subjectId, nodeId){
    
    return new Promise((resolve, reject) => {
            request(`http://hr.amiaodaifu.com:50000/1610/questions/${subjectId}/get-children/${nodeId}`, (err, res, body) => {
            if(err){
                return reject("err: ",err)
            } else {
                const content = JSON.parse(body); 
                return content.length == 0 ? resolve(content) : resolve({
                    id: nodeId,
                    children: JSON.parse(body)
                })
            }
        })
    });
}
Ty80

Correct answer upstairs, promise is used in the wrong place

刘奇

return Promise.map(items.children, item => (getTree(item)))

Is there a Promise.map function? How to use it?

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template