我是Sails.js的新手,我正在寻找使用sail.js开发一个新的应用程序,在这个应用程序中,我希望尽快响应POST请求,然后处理一些任务有效载荷是异步的。理想情况下,我希望在有效负载上执行的任务的每一步都有一个帮助程序,并在操作中异步链接它们。我一直在浏览文档,似乎无法找到一种方法来做到这一点。
这是解决此问题的正确方法吗(如果是这样的话,您是否/可以指向我的文档)还是有其他方法来处理我忽略的问题?
由于
答案 0 :(得分:1)
在ES6中,您可以将helpers与async / await或promise一起使用。
const temp1 = await sails.helpers.stepone();
const temp2 = await sails.helpers.steptwo( temp1 );
let result = await sails.helpers.stepthree( temp2 );
// use result here
OR
sails.helpers.stepone
.then(sails.helpers.steptwo)
.then(sails.helpers.stepthree)
.then(result => {
// use result here
});
答案 1 :(得分:0)
只需将服务方法设置为承诺并尽早解决。例如,您可以导入bluebird
来完成此操作。
在您的控制器中:
myPostEndpoint: (req, res) => {
return MyProcessorService.initProcessing(req.body).then(res.json);
}
并在您的服务中MyProcessorService
:
var Promise = import('bluebird');
//... other init code
module.exports = {
initProcessing: data => {
//do some validation...
// then just resolve and continue
Promise.resolve({ status: 'processing'});
return MyProcessorService.step1(data)
.then(MyProcessorService.step2)
.then(MyProcessorService.step3)//and so on....
},
step1: dataFromInit => {
//do stuff and resolve for step2
},
step2: dataFromStep1 => {
//do stuff and resolve for step3
},
step3: dataFromStep2 => {
//do stuff and resolve
},
//and so on
}
您还可以使用Bull和Redis等工具设置工作队列,以便将作业发送到WorkerService或单独的工作者应用程序中运行。