2017-09-02 3 views
1

私は私の約束事を私の速報で働かせようとしていますが、前にこれをやったにもかかわらず、なぜうまくいかないのか分かりません。 。プロミスチェーンは続かないようです。

router.post('/auth/token', function (req, res) { 
     var schema = require('./schema/token.js'); 

     var data = { 
     username: req.body.username, 
     password: req.body.password 
     }; 

     new Promise(function (resolve, reject) { 
     logger.info(`Validating request..`); 
     return validator.validate(schema, data); 
     }).then(function() { 
     logger.info(`Getting token..`); 
     return authentication.getToken(data.username, data.password); 
     }).then(function (result) { 
     logger.info(`Received token..`); 
     res.send(result); 
     }).catch(function (err) { 
     logger.info(`Unable to receive token..`); 
     res.send(err); 
     }) 
    }) 

Validator.js:

module.exports.validate = function (schema, data) { 
    return new Promise(function(resolve, reject){ 
     logger.info(`Loading schema..`); 
     if (!schema) { 
      logger.info(`Missing schema, rejecting promise..`); 
      return reject(new Error('Missing schema')); 
     } 

     const ajv = new Ajv({ v5: true, allErrors: true }); 

     logger.info(`Compling schema..`); 
     const validate = ajv.compile(schema); 
     logger.info(`Validating schema..`); 
     const valid = validate(data); 

     if (!valid) { 
      const errors = validate.errors.map((error) => `${error.dataPath.replace('.', '')}: ${error.message}`); 
      const err = new Error(errors); 
      return reject(err); 
     } 

     logger.info(`Valid schema.. resolving..`); 
     return resolve(); 
    }) 
} 

は私が

約束を継続していない、それは停止し、検証解決した後に停止するようだどこに従うために多くのログを追加しました

これを実行すると、ログに次のようなメッセージが表示されます。

info: Validating request.. 
info: Loading schema.. 
info: Compling schema.. 
info: Validating schema.. 
info: Valid schema.. resolving.. 

私は最初の約束を変えて解決と拒否を強制すると、次の約束事に進むはずですが、それはうまくいくでしょうが、私が知る限り、約束しても何のエラーもありません

アイデアはありますか?

答えて

1

を使用しないでください。validateのいずれかを使用してください。 ***以下を参照:

router.post('/auth/token', function (req, res) { 
    var schema = require('./schema/token.js'); 

    var data = { 
     username: req.body.username, 
     password: req.body.password 
    }; 

    logger.info(`Validating request..`);  // *** 
    validator.validate(schema, data)   // *** 
    .then(function() { 
     logger.info(`Getting token..`); 
     return authentication.getToken(data.username, data.password); 
    }).then(function (result) { 
     logger.info(`Received token..`); 
     res.send(result); 
    }).catch(function (err) { 
     logger.info(`Unable to receive token..`); 
     res.send(err); 
    }) 
}) 

問題は、あなたが作成した新しい約束を解決することはありません。しかし、あなたがすでにそれを持っているときに新しい約束を作る良い理由はないので、解決策はあなたが持っているものを使うことです。

+1

Ha..duh!おかげで..私は何か愚かな行方不明だったことを知っていた!..分で答える – jaekie

関連する問題