首页 > 解决方案 > 承诺 {.forEach 不是函数

问题描述

这个函数,我试图遍历我的目录的内容,但是返回错误。

contents.forEach 不是函数

function getBook(fileName){
return new Promise((resolve,reject)=>{
    const bookSql =`select * from book1 where fileName='${fileName}'`
    const contentsSql =`select * from contents1 where fileName='${fileName}'order by \`order\``
    const book = db.queryOne(bookSql)
    const contents = db.querySql(contentsSql)
    if(book){
        book.cover=Book.genCoverUrl(book)
        console.log('contents:',contents);
        book.contentsTree=Book.genContentsTree(contents)
    }
    resolve(book)
})
}

而 genContentsTree 的主要问题就在这里 .forEach

static genContentsTree(contents){
    if(contents){
        const contentsTree = []
        contents.forEach(c => {
            c.children = []
            if (c.pid === '') {
                contentsTree.push(c)
            } else {
              const parent = contents.find(_ => _.navId === c.pid)
              parent.children.push(c)
            }
          }) 
          return contentsTree
    }
}

这是控制台报告的错误和有关内容的输出

contents: Promise { <pending> }
TypeError: contents.forEach is not a function
    at Function.genContentsTree (/Users/dujinyang/admin-imooc-node/models/Book.js:362:22)
    at /Users/dujinyang/admin-imooc-node/services/book.js:72:32
    at new Promise (<anonymous>)
    at getBook (/Users/dujinyang/admin-imooc-node/services/book.js:64:8)
    at /Users/dujinyang/admin-imooc-node/router/book.js:53:13
    at Layer.handle [as handle_request] (/Users/dujinyang/admin-imooc-node/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/dujinyang/admin-imooc-node/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/dujinyang/admin-imooc-node/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/dujinyang/admin-imooc-node/node_modules/express/lib/router/layer.js:95:5)
    at /Users/dujinyang/admin-imooc-node/node_modules/express/lib/router/index.js:281:22 {
  isBoom: true,
  isServer: true,
  data: null,
  output: {
    statusCode: 500,
    payload: {
      statusCode: 500,
      error: 'Internal Server Error',
      message: 'An internal server error occurred'
    },
    headers: {}
  },
  reformat: [Function],
  isDeveloperError: true
}
{
  code: -1,
  msg: 'contents.forEach is not a function',
  error: 500,
  errorMsg: 'Internal Server Error'
}

标签: javascriptnode.js

解决方案


推荐阅读