Async / Await在MongoDB中无法正常运行

问题描述 投票:0回答:1

我正在使用sails 1.0nodejs中工作。我正在尝试使用async / await创建记录,但无法正常工作。

在下面的代码中,等待调用后立即执行下一行。我的要求是,它应该等到获取数据后再取决于sesondata下一个函数的发生。

请帮助我,在此先感谢...

controller.js

create: async function(req, res) {
  let msg = req.body;
  let sesondata = await DeviceHelpers.create(receievedMessage);
  if(sesondata) {
      console.log(sesondata);
      }
}

DeviceHeper.js

create: function(receievedMessage){
    User.create(receievedMessage,(err, data)=> {
      if (err) {
         return(err);
      } else {
        return (data);
      }
    }, { fetch: true });
  },
node.js async-await sails.js
1个回答
0
投票

看起来您在生活中从未正确地编写过async / await。 (:

至少您会知道异步/等待是对诺言的语法糖,您可以将DeviceHelper.js中的代码包装到Promise中:

create: function(receievedMessage){
  return new Promise((resolve, reject) => {

    User.create(
      receievedMessage,
      (err, result)=> {
        if (err) return reject(error); 
        resolve(result);
      }, 
      {fetch: true}
    );

  });
},

或者如果您愿意read official manual,您可以在其中看到示例:

var createdRecord = await Something.create(initialValues).fetch();

所以您在DeviceHelper.js中的代码变得更短:

create: async function(receievedMessage) {
  const result = await User.create(receievedMessage).fetch();
  return result;
},

或:

create: async function(receievedMessage) {
  return await User.create(receievedMessage).fetch();
},

OR:

create: function(receievedMessage) {
  return User.create(receievedMessage).fetch();
},

P.S。您写道:

我正在使用Sails 1.0在nodejs中工作。我正在尝试使用async / await创建记录,但无法正常工作。

repository中可以阅读:

从1.0版开始,Sails支持开箱即用。这将嵌套回调(以及相应的错误处理)替换为简单,熟悉的用法。

© www.soinside.com 2019 - 2024. All rights reserved.