如何使用"等待"在创建新记录时在风帆中

时间:2018-04-01 02:32:56

标签: node.js sails.js

我想用#34; await"

根据帆文件,我的行为如下:
https://sailsjs.com/documentation/reference/waterline-orm/models/create

create: function (req, res, next) {

var new_place = await Place.create({...}, function place_created(err, XX){

  if(err && err.invalidAttributes) {
    return res.json({'status':false, 'errors':err.Errors});
  } 
}).fetch();
if(new_place){
  console.log(new_place);
  res.json({'status':true,'result':new_place});
 }
},  

但是我得到以下错误:

var new_place = await Place.create({...}, function place_created(err, XX){
                ^^^^^
SyntaxError: await is only valid in async function  

我该怎么做才能解决这个问题。

2 个答案:

答案 0 :(得分:7)

  

SyntaxError:await仅在异步函数

中有效

这是因为您在非await

的函数中使用async
  

请记住, await关键字仅在异步函数中有效。如果你在异步函数体之外使用它,你将得到一个SyntaxError。

来源 MDN async function

您需要使函数async才能正常工作。在代码中进行这些更改

'use strict';

create: async function(req, res, next) {
        var new_place = await Place.create({ ... }, function place_created(err, XX) {
            if (err && err.invalidAttributes) {
                return res.json({ 'status': false, 'errors': err.Errors });
            }
        }).fetch();
        if (new_place) {
            console.log(new_place);
            res.json({ 'status': true, 'result': new_place });
        }
    },

答案 1 :(得分:1)

我认为你应该让你的函数异步。

 async(function(){
   var new_place = await Place.create({...})
})();

如果您正在使用等待,则不应使用回调。您应按照here

所述管理响应

Also you can check this guide of how to manage async in sail.js