そう。私が構築している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()
か?