node.js - node Promise的问题

浏览:27日期:2022-09-30

问题描述

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

是我的思路有问题吗?

问题解答

回答1:

首先,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)}) }}) });}回答2:

楼上正解, promise用错地方了

回答3:

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

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

相关文章: