【发布时间】:2018-07-11 21:29:01
【问题描述】:
给定一个 blob 列表,我想一个一个地删除它们(因为在 azure storage sdk 中没有批量/批量删除 blob)而不阻塞节点的事件循环或快速服务器。删除由请求触发(并在其上运行)。但是,尽管整个流程尽可能异步,但一旦删除开始,快速服务器就会变得无响应,有时某些端点会返回 500。
const async = require('async');
const azure = require('azure-storage');
const Promise = require('bluebird');
const blobService = azure.createBlobService(CONFIG.CONNECTION_STRING);
// Endpoint
app.delete(`${BASE_URL}/files/:date`, deleteFiles);
const deleteFiles = async (req, res) => {
const date = req.params.date;
if (!date) {
return res.status(400).send();
}
await deleteBlobs(date).catch((err) => {
return res.status(500).send(err);
});
res.status(200).send();
};
const deleteBlobs = (date) => {
return new Promise(async (resolve, reject) => {
// findFiles calls blobService.listBlobsSegmentedWithPrefix and performs some async.map on the returned entrieds
const blobNames = await findFiles(date)
.catch(err => log.error('findFiles failed in deleteBlobs.', err));
async.each(
blobNames,
(blobName, callback) => {
blobService.deleteBlob(CONTAINER, blobName, (deleteError) => {
if (deleteError) {
return callback(deleteError);
}
callback();
});
},
err => {
if (err) {
return reject(err);
}
resolve();
});
});
};
那么我错过了什么?为什么服务器在删除完成之前没有响应?
提及(也许有帮助):快速服务器/应用程序托管在 Azure 中,采用基本 (B1) 服务计划。
【问题讨论】:
-
我认为问题不是特定于您的应用程序,很可能与浏览器缓存有关。检查@Josh Lee's answer 看看是否有帮助。
-
浏览器缓存与此无关,因为所有请求都被阻止,而不仅仅是同一个
标签: node.js azure express azure-storage async.js