Это не вопрос "каков наилучший способ рефакторинга следующего кода". речь идет о том, «как я могу реорганизовать следующий код, чтобы иметь какой-либо контроль над обоими исключениями».
У меня есть следующий код, который передает файл в запрос PUT.
import fs from 'fs'
import got from 'got' // it doesn't really matters if it's `axious` or `got`
async function sendFile(addressToSend: string, filePath: string) {
const body = fs.createReadStream(filePath)
body.on('error', () => {
console.log('we cached the error in block-1')
})
try {
const result = await client.put(addressToSend, {
body,
})
} catch (e) {
console.log('we cached the error in block-2')
}
}
Я пытаюсь реорганизовать этот код таким образом, чтобы дать мне возможность отлавливать все ошибки в одном месте.
Приведенное выше решение не дает мне способа проверить сбой stream
. например, если я передам файл, который не существует, функция напечатает и we cached the error in block-1
, и we cached the error in block-2
, но у меня нет способа повторно выдать эту первую ошибку или использовать ее в тестах в любом случае.
Примечание:
Я не уверен, что лучший способ решить это сделать это:
Потому что, когда я передаю filePath, который не существует, rej
функция будет вызываться дважды, что является очень плохой практикой.
function sendFile(addressToSend: string, filePath: string) {
return new Promise(async (res, rej) => {
const body = fs.createReadStream(filePath)
body.on('error', () => {
console.log('we cached the error in block-1')
rej('1')
})
try {
const result = await client.put(addressToSend, {
body,
})
res()
} catch (e) {
console.log('we cached the error in block-2')
rej('2')
}
})
}