节点JS:Promise解析值是“未定义”

时间:2018-11-22 14:55:48

标签: javascript node.js mongoose

我正在尝试通过递归方法(通过Mongoose)保存多个文档。

我创建了一个Promise,它解析了一种方法admin_save_choices()来保存Array的文档,并在保存文档后最终返回Array的{​​{1}}或错误信息。当文档保存在回调中时,它会递归调用自身(Objects)直到存在admin_save_choices()元素。

这里是Array-

Promise

这是方法-

        let choices_object_array_promise = new Promise(function(resolve, reject) {
          let choices_object_array = admin_save_choices(choices, timestamp);

          resolve(choices_object_array);
        });

        choices_object_array_promise.then(function(result){

          console.log(result);
          res.status(200);
          res.json('success');
        }).catch(function(error) {
          res.status(400);
          res.json('error');
        });

所有文档都已成功保存,除了我没有得到结果返回到var admin_save_choices = function(choices, timestamp) { let choices_object_array = []; let choice = choices.shift(); if (typeof choice === "undefined") return choices_object_array; let choice_information = { choice: choice, created_time: timestamp }; let save_choice_promise = choiceModel.save_choice(choice_information); save_choice_promise.then(function(choice_result_object) { choices_object_array.push(choice_result_object); admin_save_choices(choices, timestamp); }).catch(function(error) { return 'error'; }); } 回调。

它在choices_object_array_promise.then(中显示undefined

谢谢。

1 个答案:

答案 0 :(得分:2)

这是因为admin_save_choices不返回任何内容。

我猜您正在尝试返回admin数组,也许这就是您想要做的事情:

// inside admin_save_choices 
return save_choice_promise
  .then(function(choice_result_object) {
    choices_object_array.push(choice_result_object);
    return admin_save_choices(choices, timestamp);
  }).catch(function(error) {
    return error;
  });
}

let choices_object_array_fn = new Promise(function(resolve) {
  resolve(admin_save_choices(choices, timestamp));
});

编辑:出于防反模式的考虑:)