Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Promise.resolve与数组_Javascript_Arrays_Promise - Fatal编程技术网

Javascript Promise.resolve与数组

Javascript Promise.resolve与数组,javascript,arrays,promise,Javascript,Arrays,Promise,我有以下代码。它的目的是从数据库获取数据并将其格式化为JSON对象,以便与VueCal兼容 我从数据库中请求数据,然后获取每个结果并创建一个JSON对象,将该对象推送到一个数组中,然后使用Promise.resolve([array name])希望返回带有Promise的数组 我将其包装在一个Promise.all块中,然后将所有这些已解析的承诺添加到另一个数组中。最后一个数组包含4个未定义的元素。为什么会这样 try { const results = await Promise.a

我有以下代码。它的目的是从数据库获取数据并将其格式化为JSON对象,以便与VueCal兼容

我从数据库中请求数据,然后获取每个结果并创建一个JSON对象,将该对象推送到一个数组中,然后使用
Promise.resolve([array name])
希望返回带有Promise的数组

我将其包装在一个
Promise.all
块中,然后将所有这些已解析的承诺添加到另一个数组中。最后一个数组包含4个未定义的元素。为什么会这样

try {
    const results = await Promise.all([
      Budget.find({
        userEmail: req.body.userEmail
      })
        .then(budgets => {
          let budgetsFormatted = []
          for (let i = 0; i < budgets.length; i++) {
            if (budgets[i].startDate) {
              var startBegin = moment(budgets[i].startDate, 'YYYY-MM-DD HH:mm')
              var endBegin = moment(budgets[i].startDate, 'YYYY-MM-DD HH:mm').add(1, 'hour')
              var startEnd = moment(budgets[i].startDate, 'YYYY-MM-DD HH:mm').add(budgets[i].duration, 'days')
              var endEnd = moment(budgets[i].startDate, 'YYYY-MM-DD HH:mm').add(1, 'hour')
            } else {
              continue
            }
            budgetsFormatted.push({
              title: budgets[i].title,
              start: startBegin,
              end: endBegin,
              content: octicons.credit_card + '<br>£' + budgets[i].amount
            })
            budgetsFormatted.push({
              title: budgets[i].title,
              start: startEnd,
              end: endEnd,
              content: octicons.credit_card + '<br>£' + budgets[i].amount
            })
          }
          console.log(budgetsFormatted)
          Promise.resolve(budgetsFormatted)
        })
        .catch(err => {
          Promise.reject(err)
        }),

      Notes.find({
        userEmail: req.body.userEmail
      })
        .then(notes => {
          let notesFormatted = []
          for (let i = 0; i < notes.length; i++) {
            if (notes[i].dateCreated) {
              var start = moment(notes[i].dateCreated, 'YYYY-MM-DD HH:mm')
              var end = moment(notes[i].dateCreated, 'YYYY-MM-DD HH:mm').add(1, 'hour')
            } else {
              continue
            }
            notesFormatted.push({
              title: notes[i].title,
              start: start,
              end: end,
              content: octicons.note + '<br>' + notes[i].body.substr(1, 10) + '...'
            })
          }
          console.log(notesFormatted)
          Promise.resolve(notesFormatted)
        })
        .catch(err => {
          Promise.reject(err)
        }),

      StudyPlan.find({
        userEmail: req.body.userEmail
      })
        .then(studyplan => {
          let studyPlansFormatted = []
          for (let i = 0; i < studyplan.length; i++) {
            for (let j = 0; j < studyplan[i]['daysAndTimes'].length; j++) {
              if (studyplan[i]['daysAndTimes'].timeFrom) {
                var start = moment(studyplan[i]['daysAndTimes'].timeFrom, 'YYYY-MM-DD HH:mm')
                var end = moment(studyplan[i]['daysAndTimes'].timeFrom, 'YYYY-MM-DD HH:mm').add(studyplan[i]['daysAndTimes'].duration, 'hours')
              } else {
                continue
              }
              studyPlansFormatted.push({
                title: studyplan[i].title,
                start: start,
                end: end,
                content: octicons.pencil
              })
            }
          }
          console.log(studyPlansFormatted)
          Promise.resolve(studyPlansFormatted)
        })
        .catch(err => {
          Promise.reject(err)
        }),

      TodoList.find({
        userEmail: req.body.userEmail
      })
        .then(todolists => {
          let todoListsFormatted = []
          for (let i = 0; i < todolists.length; i++) {
            if (todolists[i].dateDue) {
              var start = moment(todolists[i].dateDue, 'YYYY-MM-DD HH:mm')
              var end = moment(todolists[i].dateDue, 'YYYY-MM-DD HH:mm').add(1, 'hours')
            } else {
              continue
            }

            todoListsFormatted.push({
              title: todolists[i].title,
              start: start,
              end: end,
              content: octicons.tasklist
            })
          }
          console.log(todoListsFormatted)
          Promise.resolve(todoListsFormatted)
        })
        .catch(err => {
          Promise.reject(err)
        })
    ])

    const events = [].concat.apply([], results)
试试看{
const results=等待承诺。全部([
Budget.find({
userEmail:req.body.userEmail
})
。然后(预算=>{
让budgetsFormatted=[]
for(设i=0;i英镑'+预算[i].金额
})
Budgets.push({
标题:预算[i]。标题,
开始:startEnd,
完:恩登德,,
内容:octicons.credit_card+'
英镑'+预算[i].金额 }) } console.log(budgetsFormatted) Promise.resolve(预算格式) }) .catch(错误=>{ 承诺。拒绝(错误) }), Notes.find({ userEmail:req.body.userEmail }) 。然后(注意=>{ let notesFormatted=[] for(设i=0;i'+notes[i].body.substr(1,10)+' }) } console.log(注释格式) 承诺.解决(注格式) }) .catch(错误=>{ 承诺。拒绝(错误) }), 研究计划({ userEmail:req.body.userEmail }) .然后(studyplan=>{ 让studyPlansFormatted=[] for(设i=0;i{ 承诺。拒绝(错误) }), TodoList.find({ userEmail:req.body.userEmail }) 。然后(todolists=>{ 让ToDolistFormatted=[] for(设i=0;i{ 承诺。拒绝(错误) }) ]) 常量事件=[].concat.apply([],结果)
编辑:

如果有人想看,我会把代码放在那里。但这是代码的基本结构:

const results = await Promise.all([
  //Find data in Database
  |
   ->  //Format result to be a JSON object like the following:
        {
          title: 'Event Title',
          start: //Start date of event,
          end: //End date of event,
          content: '<content> of event object in </calendar>'
        }
        //Add this object into array
        Promise.resolve(the above referenced array)

  //Repeat the above for each collection in the database

])

const events = [].concat.apply([], results)
const results=wait Promise.all([
//在数据库中查找数据
|
->//将结果格式化为JSON对象,如下所示:
{
标题:“活动标题”,
开始日期:/事件的开始日期,
结束://活动结束日期,
内容:“中的事件对象的”
}
//将此对象添加到数组中
Promise.resolve(上面引用的数组)
//对数据库中的每个集合重复上述操作
])
常量事件=[].concat.apply([],结果)

您忘记在每个承诺处理程序中返回结果。这就是为什么结果中的元素未定义的原因

return Promise.resolve(budgetsFormatted)

代码太多了。试着把它简化成一个更简单的例子,可以扩展到你的实际问题。@FranciscoHanna Done你有没有试过删除
wait
并处理
承诺。所有的
都是
然后
?这一行是什么意思
[].concat.apply([],results)
?为什么不直接使用
结果
数组?我只是尝试用
然后
处理它,它仍然只是返回一个
空的数组
,为什么要用
promise.resolve()
创建一个新的promise呢?
然后
已经返回了一个promise。