我想洗掉一個檔案并等待洗掉成功后再繼續。我在 promise 中使用了 unlink 函式來獲取結果,但是當 unlink 成功完成時,如果在洗掉檔案時出現任何錯誤扭結,promise 不會回傳任何錯誤,我會從 promise 中獲取結果。
服務:
public removeUserImage(
user: User,
): Promise<NodeJS.ErrnoException | boolean> {
const pathToRemoveImage = 'src/public/uploads' '/' user.image_url;
return new Promise((resolve, reject) => {
unlink(pathToRemoveImage, (error) => {
if (error) reject(error);
resolve(true);
});
});
}
控制器:
const isFileRemoved = await this._userService.removeUserImage(user);
//This block not excuting
if (!isFileRemoved) {
throw new InternalServerErrorException(
'Error occurred while trying to remove file.',
);
}
uj5u.com熱心網友回復:
如果出現錯誤,您的承諾將被拒絕。使用時await,您需要將代碼包裝起來try..catch以處理任何故障
try {
await this._userService.removeUserImage(user);
} catch (err) {
console.error(err);
throw new InternalServerErrorException(
'Error occurred while trying to remove file.'
);
}
僅供參考,您可以(并且應該)使用函式的Promises API版本fs
import { unlink } from "node:fs/promises";
public removeUserImage({ image_url }: User): Promise<void> {
const pathToRemoveImage = `src/public/uploads/${image_url}`;
return unlink(pathToRemoveImage);
}
如果您希望您的方法始終使用布林值決議,您需要類似
return unlink(pathToRemoveImage)
.then(() => true) // resolve with "true" for success
.catch((err) => {
console.error("removeUserImage", image_url, err);
return false; // resolve with "false" for failure
});
uj5u.com熱心網友回復:
錯誤總是會去 catch 塊,
try {
await this._userService.removeUserImage(user);
} catch (err) {
console.error(err);
throw new InternalServerErrorException(
'Error occurred while trying to remove file.'
);
}
建議:您不需要將 unlink(callback) 轉換為 promise fs 也具有 promise 功能,請檢查此
const fs = require('fs');
const fsPromises = fs.promises;
public removeUserImage(
user: User,
): Promise<NodeJS.ErrnoException | boolean> {
const pathToRemoveImage = 'src/public/uploads' '/' user.image_url;
return fsPromises.unlink(pathToRemoveImage);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/486393.html
標籤:javascript 打字稿 承诺
上一篇:如何將包含嵌套json作為屬性字串的JSON.parse()json?
下一篇:展開后回傳聯合型別的實體
