Sailsjs 创建对象——嵌套创建
Sailsjs create objects - nested creations
我有一个控制器接受 API 调用 /task/:id/start。我的控制器方法需要检查 Task with at id 是否有效,如果有效,那么我需要创建另外 2 个模型实例。我需要先创建 TaskSet
,然后再创建 TaskSetEvents
。
TaskSet
需要创建任务,TaskSetEvents
需要创建 TaskSet
。以下是我计划如何创建这些事件。我不确定是否有更好的方法来创建这些对象。
TaskSet.create({ task: task}).exec(function(err, taskSet) {
TaskSetEvent.create({ taskSet: taskSet, eventType: 'start'}).exec(function (err, taskSetEvent) {
console.log("Everything created ok");
});
});
这应该可以正常工作:
TaskSetEvent.create({
eventType: 'start',
taskSet: {
task: myTask
}
})
.then(function (taskSetEvent) {
console.log('should be done here');
});
如果您通过控制器端点执行此操作,则不必编写任何代码。只是 POST
你的嵌套对象。
您的代码一切正常。无论如何,当有更多的嵌套函数时,代码变得难以阅读和维护,称为意大利面条代码或回调地狱。
在 JavaScript 中,解决回调问题的常见方法是使用承诺或使用特殊工具,例如 async.js。
对于您的代码片段 async.waterfall()
是绝对可行的方法。你可以这样改写:
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
在你的全局配置中。
我有一个控制器接受 API 调用 /task/:id/start。我的控制器方法需要检查 Task with at id 是否有效,如果有效,那么我需要创建另外 2 个模型实例。我需要先创建 TaskSet
,然后再创建 TaskSetEvents
。
TaskSet
需要创建任务,TaskSetEvents
需要创建 TaskSet
。以下是我计划如何创建这些事件。我不确定是否有更好的方法来创建这些对象。
TaskSet.create({ task: task}).exec(function(err, taskSet) {
TaskSetEvent.create({ taskSet: taskSet, eventType: 'start'}).exec(function (err, taskSetEvent) {
console.log("Everything created ok");
});
});
这应该可以正常工作:
TaskSetEvent.create({
eventType: 'start',
taskSet: {
task: myTask
}
})
.then(function (taskSetEvent) {
console.log('should be done here');
});
如果您通过控制器端点执行此操作,则不必编写任何代码。只是 POST
你的嵌套对象。
您的代码一切正常。无论如何,当有更多的嵌套函数时,代码变得难以阅读和维护,称为意大利面条代码或回调地狱。
在 JavaScript 中,解决回调问题的常见方法是使用承诺或使用特殊工具,例如 async.js。
对于您的代码片段 async.waterfall()
是绝对可行的方法。你可以这样改写:
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
在你的全局配置中。