承诺连锁似乎不会继续
我试图让我的承诺链在我的快递员工作,但似乎无法弄清楚为什么它不会工作,即使我以前这样做。
我添加了许多日志来跟踪停止,并且在validationparsing后似乎停止,不会继续
诺言:
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..
不再继续,它应该继续下一个承诺,现在如果我改变了第一个承诺,并强制一个决心和拒绝,它会工作,但据我所知,这不应该是必要的,因为validation返回一个承诺,我没有得到任何错误
有任何想法吗?
不要创造新的承诺, 使用 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); }) })
问题是你永远不能解决你创造的新的承诺。 但是,既然没有足够的理由去创造一个新的承诺,那么解决scheme就是使用你所拥有的承诺。