Sails.js 1.0帮助链接为Promises

时间:2017-04-12 09:58:10

标签: sails.js

我是Sails.js的新手,我正在寻找使用sail.js开发一个新的应用程序,在这个应用程序中,我希望尽快响应POST请求,然后处理一些任务有效载荷是异步的。理想情况下,我希望在有效负载上执行的任务的每一步都有一个帮助程序,并在操作中异步链接它们。我一直在浏览文档,似乎无法找到一种方法来做到这一点。

这是解决此问题的正确方法吗(如果是这样的话,您是否/可以指向我的文档)还是有其他方法来处理我忽略的问题?

由于

2 个答案:

答案 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
}

您还可以使用BullRedis等工具设置工作队列,以便将作业发送到WorkerService或单独的工作者应用程序中运行。