Javascript 如何使其成为异步函数

Javascript 如何使其成为异步函数,javascript,node.js,Javascript,Node.js,当我运行下面的代码时,我得到一个错误,wait仅在异步函数中受支持。由于我的路由是异步的,我怎样才能使下面的内容异步呢?但我想,因为我在异步函数中调用了一个承诺,所以我需要使它异步。下面是路线 contactRoutes.get('/:id', async(req, res) => { cb.getDoc(req.bucket, req.params.id ).then(result=>{ var tasks = await cb.n1qlQuery_wI

当我运行下面的代码时,我得到一个错误,wait仅在异步函数中受支持。由于我的路由是异步的,我怎样才能使下面的内容异步呢?但我想,因为我在异步函数中调用了一个承诺,所以我需要使它异步。下面是路线

contactRoutes.get('/:id', async(req, res) => {

    cb.getDoc(req.bucket, req.params.id ).then(result=>{

        var tasks = await cb.n1qlQuery_wId(req.bucket,req.N1qlQuery, cbQ.qContactTasks,req.params.id)
        console.log(JSON.stringify(tasks))

        res.json({ Success: true , Error: "", Message:"", Data: result.value})

       }).catch(err=>{
           res.json({ Success: false , Error: err, Message: ""})

       })


})

您必须将aync回调传递到promise解析器
中,然后像这样

contactRoutes.get('/:id', async(req, res) => {

    cb.getDoc(req.bucket, req.params.id ).then(async (result)=>{
         ...........
    }

})
contactRoutes.get('/:id', async (req, res) => {
  var result = await cb.getDoc(req.bucket, req.params.id)
  var tasks = await cb.n1qlQuery_wId(req.bucket, req.N1qlQuery, cbQ.qContactTasks, req.params.id)
  console.log(JSON.stringify(tasks))

  res.json({ Success: true, Error: "", Message: "", Data: result.value })
}).catch(err => {
  res.json({ Success: false, Error: err, Message: "" })
});
或者您也可以像这样在您的承诺电话中使用
wait

contactRoutes.get('/:id', async(req, res) => {

    cb.getDoc(req.bucket, req.params.id ).then(async (result)=>{
         ...........
    }

})
contactRoutes.get('/:id', async (req, res) => {
  var result = await cb.getDoc(req.bucket, req.params.id)
  var tasks = await cb.n1qlQuery_wId(req.bucket, req.N1qlQuery, cbQ.qContactTasks, req.params.id)
  console.log(JSON.stringify(tasks))

  res.json({ Success: true, Error: "", Message: "", Data: result.value })
}).catch(err => {
  res.json({ Success: false, Error: err, Message: "" })
});

中设置回调函数,然后将其设置为异步。请参阅下面的代码

contactRoutes.get('/:id', async(req, res) => {

cb.getDoc(req.bucket, req.params.id ).then(async result=>{

    var tasks = await cb.n1qlQuery_wId(req.bucket,req.N1qlQuery, cbQ.qContactTasks,req.params.id)
    console.log(JSON.stringify(tasks))

    res.json({ Success: true , Error: "", Message:"", Data: result.value})

   }).catch(err=>{
       res.json({ Success: false , Error: err, Message: ""})

   })


})

您将
async
添加到
然后(…)
的处理程序,而不是路由。为什么?因为,wait在该处理程序中使用。

请尝试以下操作:

contactRoutes.get('/:id', async(req, res) => {
    try{
        let result = await cb.getDoc(req.bucket, req.params.id );
        let tasks = await cb.n1qlQuery_wId(req.bucket,req.N1qlQuery, cbQ.qContactTasks,req.params.id)
        console.log(JSON.stringify(tasks))
        res.json({ Success: true , Error: "", Message:"", Data: result.value})
    }
    catch(err){
        res.json({ Success: false , Error: err, Message: ""})
    }

})
您可以这样做:

  contactRoutes.get('/:id', async(req, res) => {
    try {
      const result = await cb.getDoc(req.bucket, req.params.id )

      var tasks = await cb.n1qlQuery_wId(req.bucket,req.N1qlQuery, cbQ.qContactTasks,req.params.id)
      console.log(JSON.stringify(tasks))

      res.json({ Success: true , Error: "", Message:"", Data: result.value})

    } catch (err) {
        res.json({ Success: false , Error: err, Message: ""})
    }
  })