首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sailsjs创建对象-嵌套创建

Sailsjs创建对象-嵌套创建
EN

Stack Overflow用户
提问于 2015-02-16 04:48:12
回答 2查看 318关注 0票数 1

我有一个控制器,它接受API调用/任务/:id/start。我的控制器方法需要检查Task是否有效,如果有效,则需要创建另外两个模型实例。我需要创建TaskSet,然后创建TaskSetEvents

TaskSet需要创建任务,TaskSetEvents需要创建TaskSet。下面是我计划如何创建这些事件。我不确定是否有更好的方法来创建这些对象。

代码语言:javascript
复制
TaskSet.create({ task: task}).exec(function(err, taskSet) {
    TaskSetEvent.create({ taskSet: taskSet, eventType: 'start'}).exec(function (err, taskSetEvent) {
        console.log("Everything created ok");
    });
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-16 06:19:35

这应该是可行的:

代码语言:javascript
复制
TaskSetEvent.create({
    eventType: 'start',
    taskSet: {
      task: myTask
    }
  })
  .then(function (taskSetEvent) {
    console.log('should be done here');
  });

如果通过控制器端点执行此操作,则不需要编写任何代码。只需POST嵌套的对象。

票数 1
EN

Stack Overflow用户

发布于 2015-02-16 12:22:47

你的代码一切都很好。无论如何,当有更多的嵌套函数代码变得难以阅读和维护时,称为意大利面代码或回调地狱。

在JavaScript中,解决回调问题的常见方法是使用承诺或使用特殊工具,如async.js

对于您的代码片段,async.waterfall()是绝对可行的。您可以这样重写它:

代码语言:javascript
复制
async.waterfall([
    function(cb) {
        TaskSet.create({ task: task}).exec(cb);
    },
    function(err, taskSet, cb) {
        TaskSetEvent.create({ taskSet: taskSet, eventType: 'start'}).exec(cb);
    }
], function(err, taskSetEvent) {
    console.log('Everything created ok');
});

waterfall方法运行一系列函数,每个函数将结果传递给下一个函数。

不值得说的是,如果您想经常使用异步,您不必每次都在模块中使用异步,您可以通过npm安装它,并将async: true保存在您的globals中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28534703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档