node.js - node Promise的问题
迷茫
迷茫 2017-04-17 15:27:47
[Node.js讨论组]
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

是我的思路有问题吗?

迷茫
迷茫

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

全部回复(3)
大家讲道理

首先,request返回值不是Promise
其次,你的getNode方法里也没有返回request的结果。

可以这么改下:

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)
                })
            }
        })
    });
}
PHP中文网

楼上正解, promise用错地方了

怪我咯

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

有 Promise.map这个函数吗?怎么用?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号