gpt4 book ai didi

node.js - 删除 azure blob block 列表express/nodejs

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:35 25 4
gpt4 key购买 nike

给定一个 blob 列表,我想将它们一一删除(因为 azure storage sdk 中没有 blob 的批量删除),而不阻塞 Node 的事件循环或 Express 服务器。删除由请求触发(并根据请求运行)。但是,尽管整个流程尽可能异步,但一旦删除开始,Express 服务器就会变得无响应,有时某些端点会返回 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();

});

});

};

那我错过了什么?为什么服务器在删除完成之前没有响应?

提及(也许有帮助):快速服务器/应用程序基于基本 (B1) 服务计划托管在 Azure 中。

最佳答案

我认为有 1 个可能的原因可能导致您的 express 无响应。

删除异步操作过多,会在短时间内创建大量回调 I/O 事件。 Node.js 可能会首先服务这些事件,然后让 Node.js 处理其他传入的 HTTP 请求。

可以使用 async.eachLimit 代替 async.each 来设置较低的并发限制吗?

http://caolan.github.io/async/docs.html#eachLimit

关于node.js - 删除 azure blob block 列表express/nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48564732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com