最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

在loopbackJS中返回带有节点异步瀑布的结果

IT培训 admin 5浏览 0评论

在loopbackJS中返回带有节点异步瀑布的结果

据我所知,使用最新版本的async waterfall,cb不再可用。

既然如此,如何给远程方法做出响应呢?我似乎无法在任何地方找到这个解释。

要使用异步文档中的示例。

async.waterfall([
    function(callback) {
        callback(null, 'one', 'two');
    },
    function(arg1, arg2, callback) {
        // arg1 now equals 'one' and arg2 now equals 'two'
        callback(null, 'three');
    },
    function(arg1, callback) {
        // arg1 now equals 'three'
        callback(null, 'done');
    }
], function (err, result) {
    // result now equals 'done'

    // HOW DO I RETURN result TO THE CALLER OF THE REMOTE METHOD?
    // HOW DO I RETURN result TO THE CALLER OF THE REMOTE METHOD?
    // HOW DO I RETURN result TO THE CALLER OF THE REMOTE METHOD?


});

编辑:这是我试图传回响应的实际事件。在以前版本的async中,这只是通过将其传递给cb()来完成的。但是看起来async不再支持它。

Ticket.addComment = function( id, comment, postedBy, cb ) {

    async.waterfall([

      //get ticket and add content
      function(callback){
        Ticket.findById( id, function( err, ticket ){
          ticket.ticketComments.create({ "body": comment });
          callback(null, ticket);
        });
      },

      //update ticket isWith
      function(ticket, callback){
        ticket.save(null, {
          "id": ticket.id,
          "isWith": postedBy
        });
        callback(null,ticket);
      }

    ], function( err, ticket ){

       // I NEED TO RETURN "ticket" TO THE METHOD CALLER.. THIS USED TO BE DONE BY PASSING "ticket" INTO cb().

    });

  }

  Ticket.remoteMethod('addComment', {
    http: { verb: 'post'},
    accepts: [
      {arg: 'id', type: 'string', description: 'ticket id of the ticket the comment is to be added to'},
      {arg: 'comment', type: 'string', description: 'the comment body'},
      {arg: 'postedBy', type: 'string', description: 'Who posted the comment'}
    ],
    returns: {arg: 'comment', root: true, type: 'application/json'}
  });
回答如下:
 var create = function (req, res) {
        async.waterfall([
            _function1(req),
            _function2,
            _function3
        ], function (error, success) {
            if (error) { alert('Something is wrong!'); }
            return alert('Done!');
        });
    };
    function _function1 (req) {
        return function (callback) {
            var something = req.body;
            callback (null, something);
       }
    }

    function _function2 (something, callback) {
        return function (callback) {
           var somethingelse = function () { // do something here };
           callback (err, somethingelse);
        }
    }

    function _function3 (something, callback) {
        return function (callback) {
          var somethingmore = function () { // do something here };
          callback (err, somethingmore);
        }
    }

在loopbackJS中返回带有节点异步瀑布的结果

据我所知,使用最新版本的async waterfall,cb不再可用。

既然如此,如何给远程方法做出响应呢?我似乎无法在任何地方找到这个解释。

要使用异步文档中的示例。

async.waterfall([
    function(callback) {
        callback(null, 'one', 'two');
    },
    function(arg1, arg2, callback) {
        // arg1 now equals 'one' and arg2 now equals 'two'
        callback(null, 'three');
    },
    function(arg1, callback) {
        // arg1 now equals 'three'
        callback(null, 'done');
    }
], function (err, result) {
    // result now equals 'done'

    // HOW DO I RETURN result TO THE CALLER OF THE REMOTE METHOD?
    // HOW DO I RETURN result TO THE CALLER OF THE REMOTE METHOD?
    // HOW DO I RETURN result TO THE CALLER OF THE REMOTE METHOD?


});

编辑:这是我试图传回响应的实际事件。在以前版本的async中,这只是通过将其传递给cb()来完成的。但是看起来async不再支持它。

Ticket.addComment = function( id, comment, postedBy, cb ) {

    async.waterfall([

      //get ticket and add content
      function(callback){
        Ticket.findById( id, function( err, ticket ){
          ticket.ticketComments.create({ "body": comment });
          callback(null, ticket);
        });
      },

      //update ticket isWith
      function(ticket, callback){
        ticket.save(null, {
          "id": ticket.id,
          "isWith": postedBy
        });
        callback(null,ticket);
      }

    ], function( err, ticket ){

       // I NEED TO RETURN "ticket" TO THE METHOD CALLER.. THIS USED TO BE DONE BY PASSING "ticket" INTO cb().

    });

  }

  Ticket.remoteMethod('addComment', {
    http: { verb: 'post'},
    accepts: [
      {arg: 'id', type: 'string', description: 'ticket id of the ticket the comment is to be added to'},
      {arg: 'comment', type: 'string', description: 'the comment body'},
      {arg: 'postedBy', type: 'string', description: 'Who posted the comment'}
    ],
    returns: {arg: 'comment', root: true, type: 'application/json'}
  });
回答如下:
 var create = function (req, res) {
        async.waterfall([
            _function1(req),
            _function2,
            _function3
        ], function (error, success) {
            if (error) { alert('Something is wrong!'); }
            return alert('Done!');
        });
    };
    function _function1 (req) {
        return function (callback) {
            var something = req.body;
            callback (null, something);
       }
    }

    function _function2 (something, callback) {
        return function (callback) {
           var somethingelse = function () { // do something here };
           callback (err, somethingelse);
        }
    }

    function _function3 (something, callback) {
        return function (callback) {
          var somethingmore = function () { // do something here };
          callback (err, somethingmore);
        }
    }
发布评论

评论列表 (0)

  1. 暂无评论