0

そう。私が構築しているRestify.jsアプリケーションの基本的なミドルウェアを実装しようとすると、いくつかの癖が発生し、next()コールバックを約束します。

問題を一般的な形式で表現するには、次のようにします。

  var server = restify.createServer({
    name: config.name
  });

Promise は次のように解決します。

  server.use(function checkAcl(req, res, next) {
    // Promise is resolved
    var promise = function () {
      var deferred = require('q').defer();
      deferred.resolve();
      return deferred.promise;
    }

    promise()
      .then(function () {
        next(); // doesn't get 'called', no response sent, connection eventually times out
      }, function () {
        res.send(new restify.NotAuthorizedError());
      });
  });
  server.use(restify.bodyParser());

  ...

約束は拒否される

  server.use(function checkAcl(req, res, next) {
    // Promise is rejected
    var promise = function () {
      var deferred = require('q').defer();
      deferred.reject();
      return deferred.promise;
    }

    promise()
      .then(function () {
        next(); 
      }, function () {
        res.send(new restify.NotAuthorizedError()); // this works fine
      });
    }
  });

  server.use(restify.bodyParser());      

  ...

私は明らかに間違ったことをしていますか?洞察はありますか?それは確かに約束のコールバックに関連しているようですが、何らかの形でへの呼び出しを抑制していますnext()か?

4

1 に答える 1