如文档Delete Message所述,该功能需要参数popreceipt
,该参数由Get Messages或Update Message操作返回。
并且在更新消息操作之后,该消息的popreceipt
改变。所以,如果你的代码片段看起来是这样的:
queueSvc.getMessages('myqueue', function(error, result, response){
if(!error){
// Messages retreived
for(var index in result){
var message = result[0];
queueSvc.updateMessage('myqueue', message.messageid, message.popreceipt, 0, {messageText: 'new text'}, function(error, result, response){
if(!error){
// Message updated successfully
console.log('result: '+JSON.stringify(result));
console.log(message.popreceipt)
queueSvc.deleteMessage('myqueue', message.messageid, message.popreceipt, function(error, response){
if(!error){
console.log(response);
// Message deleted
}else{
console.log(error);
}
});
}else{
console.log(error);
}
});
}
}
});
你会出现你的问题,你可以在cmdlet的监测,我们发现popreceipt
更新操作后改变。
因此,如果您需要在更新操作后删除消息,则必须利用result
对象,它是更新后的新消息对象。
queueSvc.deleteMessage('myqueue', result.messageid, result.popreceipt, function(error, response){
if(!error){
console.log(response);
// Message deleted
}else{
console.log(error);
}
});
谢谢,加里!这是我的猜测。 我被'fast-azure-storage'误导了,它忽略了新的'popreceipt'。队伍中的官方模块非常慢。 –
顺便说一下,它已经在'fast-azure-storage'模块中实现了。 –
是的,看起来'updateMessage'函数会从[源代码]中返回新的'popreceipt'(https://github.com/taskcluster/fast-azure-storage/blob/master/lib/queue.js# L897) –