Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺链不';似乎不会继续下去了_Javascript_Node.js_Promise - Fatal编程技术网

Javascript 承诺链不';似乎不会继续下去了

Javascript 承诺链不';似乎不会继续下去了,javascript,node.js,promise,Javascript,Node.js,Promise,我试图让我的承诺链在我的特快专递中发挥作用,但似乎不明白为什么它不起作用,即使我以前做过 我添加了许多日志来跟踪它停止的位置,并且它似乎在验证解决后停止,不再继续 承诺: router.post('/auth/token', function (req, res) { var schema = require('./schema/token.js'); var data = { username: req.body.username,

我试图让我的承诺链在我的特快专递中发挥作用,但似乎不明白为什么它不起作用,即使我以前做过

我添加了许多日志来跟踪它停止的位置,并且它似乎在验证解决后停止,不再继续

承诺:

    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..
不再继续,它应该继续到下一个承诺,现在如果我更改第一个承诺并强制解决并拒绝,它将工作,但据我所知,这不应该是必需的,因为验证返回一个承诺,并且我没有得到任何错误


有什么想法吗?

不要创建新的承诺,使用
验证
中的承诺;请参见下面的
***

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);
    })
})

问题是你永远无法解决你创造的新承诺。但是,既然你已经有了新的承诺,就没有充分的理由去创造新的承诺,那么解决办法就是使用你现有的承诺。

Ha..duh!谢谢我知道我错过了一些愚蠢的事情!。。我马上就回答