Pra*_*ase 7 asynchronous node.js promise
我想对fs.accessand使用 async-await fs.unlink。两个函数都返回一个没有结果回调的错误。所以问题是如果函数抛出错误,它会直接转到 catch 块并继续进行下一次迭代。
const unlink = util.promisify(fs.unlink);
const access = util.promisify(fs.access);
const deleteAssetsCtrl = async (req, res) => {
try {
let iteration = 0;
for (let file of fileUrls) {
const fileUrl = file.fileUrl
const fileLocation = path.resolve(contentFolderPath, fileUrl);
access(fileLocation); // step 1
unlink(fileLocation); // step 2
const deleteRowQuery = `DELETE FROM table WHERE fileUrl = '${fileUrl}'`;
executeQuery(deleteRowQuery); // step 3
if (fileUrls.length == iteration){
res.send("true");
} else {
res.send('false')
}
} catch (error) {
console.log('Error =>', error);
res.send(error);
}
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)Error => Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client如何控制流量。(步骤要按顺序)
您需要await在每个异步函数上添加注释(基本上,所有返回承诺的东西)
const unlink = util.promisify(fs.unlink);
const access = util.promisify(fs.access);
const deleteAssetsCtrl = async (req, res) => {
try {
let iteration = 0;
for (let file of fileUrls) {
const fileUrl = file.fileUrl
const fileLocation = path.resolve(contentFolderPath, fileUrl);
await access(fileLocation); // step 1
await unlink(fileLocation); // step 2
const deleteRowQuery = `DELETE FROM table WHERE fileUrl = '${fileUrl}'`;
executeQuery(deleteRowQuery); // step 3
if (fileUrls.length == iteration){
res.send("true");
} else {
res.send('false')
}
} catch (error) {
console.log('Error =>', error);
res.send(error);
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着您使用Promiseutil.promisify或任何其他方法包装在 Promise 中的所有内容都会创建一个您可以使用的异步函数await。
如果您需要从函数本身返回的值,如果您使用await该函数,您将只能访问返回值的内容,因为没有该关键字,节点将继续执行并且不会等待该值返回或异步函数在继续之前完成。
| 归档时间: |
|
| 查看次数: |
3665 次 |
| 最近记录: |