unhandledRejection nodejs - PullRequest
       7

unhandledRejection nodejs

0 голосов
/ 27 декабря 2018

Я знаю, что довольно много сообщений об этой ошибке, большинство из них имеют тот же ответ, но почему-то я все еще получаю предупреждение.

Я прочитал что-то вроде этого В Node.js7 как правильно подавить UnhandledPromiseRejectionWarning? , но вместо on я использую once из-за утечки прослушивателя событий, но иногда я все равно вижу предупреждение

Я хочу получить поездкупредупреждения или решить его, так как его высказывание устарело в будущем, но не уверен, когда.

Сначала при первом запуске я получу это вначале

You have triggered an unhandledRejection, you may have forgotten to catch a Promise rejection: myrejectionmessage

затем, я получу эту ошибку

UnhandledPromiseRejectionWarning: myrejectionmessage UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 5)

это мой оригинальный код без того, что я пытался с сообщениями, которые я нашел, я пытаюсь получить некоторые файлы в aws s3 bucket но возможно, что файл в корзине не существует

эта функция предназначена для сравнения, если есть файл, затем сравнить время изменения, если файл не существует reject

exports.compareObjectMT = (s3, Key, getFileStat) => {
    const s3GetParams = {
        Bucket: process.env.S3_BUCKET,
        Key,
    };

    return new Promise((res, rej) => {
        s3.getObject(s3GetParams, (err, data) => {
            if (err) rej('myrejecterror');
            if (data) {
                res(String(getFileStat.mtimeMs) === data.Metadata.mtimems);
            }
            res(false);
        });
    });
};

Спасибо, яn заранее за любые предложения

Вот как я использую функцию

exports.s3Put = async (path) => {
    try {
        fs.readFile(path, async (err, fileBinary) => {
            if (err) throw err;
            // console.log(data, 'data');
            const s3 = new AWS.S3();
            const Key = path.replace(process.env.WATCH_PATH, '');
            const getStat = await getFileStat(path);
            console.log(getStat, 'getstateeeeeeeeeeeeeeee');
            const compareObj = await compareObjectMT(s3, Key, getStat);
            console.log(compareObj, 'compareObj');
        });
    } catch (e) {
        console.log(e, 'errorrrrrrrrrrrrr');
    }
};

1 Ответ

0 голосов
/ 27 декабря 2018
//calling compareObjectMT ,Your return value is a Promise Object either resolve/reject

//s3, Key, getFileStat aruments value you are passing

compareObjectMT(s3, Key, getFileStat).then((value)=>{do something}) 
                                     .catch((err)=>console.error(err))

то, что вы делаете, похоже на это .. Ваш обратный вызов после прочтения файла внутри try catch .. Это не перехватит ошибку отклонения от await

вы можете вывести все await в одиночный блок try catch

exports.s3Put = async (path) => {
try {
    fs.readFile(path, async (err, fileBinary) => {
        if (err) throw err;
        // console.log(data, 'data');
         try {
        const s3 = new AWS.S3();
        const Key = path.replace(process.env.WATCH_PATH, '');
        const getStat = await getFileStat(path);
        console.log(getStat, 'getstateeeeeeeeeeeeeeee');
        const compareObj = await compareObjectMT(s3, Key, getStat);
        console.log(compareObj, 'compareObj');
      }catch (e) {
    console.log(e, 'errorrrrrrrrrrrrr');
}
    });
} catch (e) {
    console.log(e, 'errorrrrrrrrrrrrr');
}

};

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...