在猫鼬中执行CRUD操作时异步/等待

时间:2019-01-26 12:14:36

标签: javascript node.js asynchronous mongoose async-await

我正在使用findByIdAndRemove猫鼬查询方法执行删除操作,并希望确保返回已删除的文档。我在Google上进行了搜索,发现我们将回调传递给findByIdAndRemove,在其中我们传递了err, doc args,如果删除成功,则删除的值将返回到doc中,这可以从fn调用中返回。但是我对async and await感到有些困惑。我有deleteUserTask fn,内部调用async deleteUserTask fn,它是基于promise的,并期望有一个promise的回报,当resolved (.then)时,我可以获取已删除任务的值。

我不确定如何从我的async deleteUserTask fn返回doc的值,然后将其在.then Promise中解析,我可以使用它吗?

采用以下方法时,由于我根本不返回doc值,因此返回的值为null

function deleteUserTask(req, res, next) {
  taskService
    .deleteUserTask(req.params.taskId)
    .then(task => {
      console.log(
        "Delete task request took " + (moment.now() - req.requestTime + " ms")
      );
      // below gives null
      console.log(task);
      res.json({ task });
    })
    .catch(err => next(err));
}

taskService.js

async function deleteUserTask(id) {
  return await Task.findByIdAndRemove(id, function(err, doc) {
    if (err) {
      return err;
    }
  });
}

1 个答案:

答案 0 :(得分:3)

在使用诺言的情况下,不应将DropdownButton<int>( hint: Text("Pick"), items: <int>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((int value) { return new DropdownMenuItem<int>( value: _number_tickets_total, child: new Text(_number_tickets_total.toString()), ); }).toList(), onChanged: (newVal) { setState(() { _number_tickets_total = newVal; }); }) 与回调一起使用。应该是:

findByIdAndRemove

在这一点上,使用async function deleteUserTask(id) { return await Task.findByIdAndRemove(id); } 函数没有任何好处,可以简化为:

async