Причина этого в том, что где-то есть ошибка в обработчике, и я даже подозреваю, что обещание не в вашем коде, а скорее в том методе read
, который вы вызываете.
Во избежание чтобы код обработчика обещаний был как можно более простым и как можно больше использовал цепочку из then
:
if (argv.password || argv.w) {
const p = new Promise((res) => {
read({ prompt: 'Password: ', silent: true }, function(er, password) {
res(password);
})
});
p.then((password) => {
console.log(password);
if (argv.update || argv.u)
cUpdate(argv.input, config, proj, argv.username, password);
});
}
Теперь я могу предположить, что метод cUpdate
завершается неудачно (не похоже, это условие), поэтому нам нужна некоторая обработка ошибок - сначала в фактическом приглашении, а также вокруг cUpdate.
if (argv.password || argv.w) {
const p = new Promise((res, rej) => {
read({ prompt: 'Password: ', silent: true }, function(er, password) {
if (er) rej(er);
else res(password);
})
});
p.then((password) => {
console.log(password);
if (argv.update || argv.u)
cUpdate(argv.input, config, proj, argv.username, password);
})
.catch(e => console.error(e));
}
Теперь вы, вероятно, увидите ошибку там, если она происходит, например, от пропущены записи config
или proj
.
Я бы также предположил, что ошибка может происходить из-за метода cUpdate
и что она также может быть асинхронной, но поскольку вы не пытаетесь ловите ошибку где угодно, и вы не обрабатываете обещание, которое показывает предупреждение там. К счастью, метод then
позволяет вам вернуть еще один Promise
, и он также будет обработан. Я также упростил бы обработчик чтения, используя promisify
, например:
const _read = require("util").promisify(read);
if (argv.password || argv.w) {
_read({ prompt: 'Password: ', silent: true }) // this will essentially handle the error and resolve with the password
.then(password => {
console.log(password);
if (argv.update || argv.u)
// all you need it to return the output of the method here if it's a promise.
return cUpdate(argv.input, config, proj, argv.username, password);
})
.catch(e => {
console.error(e);
process.exit(10); // this will allow you to see an error in the command line
});
}