gpt4 book ai didi

javascript - Promise Chain似乎没有继续

转载 作者:行者123 更新时间:2023-11-30 21:12:19 24 4
gpt4 key购买 nike

我正试图让我的 promise 链在我的 express 邮件中发挥作用,但似乎无法弄清楚为什么它不起作用,即使我之前已经这样做过。

我添加了很多日志跟踪它停止的地方,它似乎在验证解决后停止,不继续

promise :

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

验证器.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..

不再继续,它应该继续下一个 promise ,现在如果我更改第一个 promise 并强制解决并拒绝,它会起作用但据我所知,这不应该是必需的,因为验证返回一个保证我不会收到任何错误

有什么想法吗?

最佳答案

不要创建新的 promise ,使用来自validate 的 promise ;请参阅下面的 ***:

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

问题是您永远不会解决您创建的新 promise 。但是,由于没有充分的理由在您已经拥有一个新 promise 的情况下创建一个新 promise ,因此解决方案是使用您已有的 promise 。

关于javascript - Promise Chain似乎没有继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46016121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com