Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Can';t在更新azure存储队列消息后删除该消息(未找到消息)_Node.js_Azure_Azure Storage_Azure Storage Queues_Azure Node Sdk - Fatal编程技术网

Node.js Can';t在更新azure存储队列消息后删除该消息(未找到消息)

Node.js Can';t在更新azure存储队列消息后删除该消息(未找到消息),node.js,azure,azure-storage,azure-storage-queues,azure-node-sdk,Node.js,Azure,Azure Storage,Azure Storage Queues,Azure Node Sdk,为node.js使用了两个不同的库,azure存储和快速azure存储,以获得相同的结果 我是这样做的: 使用默认设置创建消息-确定 从队列中获取消息-确定 更新消息以重置可见性超时正常 处理后删除消息-错误:MessageNotFound 如果我跳过更新,一切都会顺利进行 那我做错了什么 p.S.试图分析http流量,但似乎完全符合标准。这是Azure内部的问题吗? 也许有人有使用其他语言库更新消息的经验?由于auth头的计算,不方便curl该服务。您所说的“更新消息以重置可见性超时”是什么意

为node.js使用了两个不同的库,
azure存储
快速azure存储
,以获得相同的结果

我是这样做的:

  • 使用默认设置创建消息-确定
  • 从队列中获取消息-确定
  • 更新消息以重置可见性超时<代码>正常
  • 处理后删除消息-错误:MessageNotFound
  • 如果我跳过更新,一切都会顺利进行

    那我做错了什么

    p.S.试图分析http流量,但似乎完全符合标准。这是Azure内部的问题吗? 也许有人有使用其他语言库更新消息的经验?由于auth头的计算,不方便
    curl
    该服务。

    您所说的“更新消息以重置可见性超时”是什么意思?您是否将不可见超时设置为零?如果是这样,则步骤4中的错误是预期的,因为不允许您查看当前可见的消息。

    如文档所述,该函数需要or操作返回的参数
    popReceive

    更新消息操作后,此消息的
    popReceive
    。所以,如果您的代码段如下所示:

    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中进行监视,我们发现更新操作后,
    popReceive
    已更改

    因此,如果需要在更新操作后删除消息,则必须利用更新后的新消息对象
    result
    对象

    queueSvc.deleteMessage('myqueue', result.messageid, result.popreceipt, function(error, response){
                if(!error){
                    console.log(response);
                  // Message deleted
                }else{
                    console.log(error);
                }
              });
    

    不,我本想再调30秒的。谢谢你,加里!那是我的猜测。我被
    快速azure存储
    误导了,它忽略了新的
    PopReceive
    。而且官方模块的队列速度非常慢。顺便说一句,它已经在
    快速azure存储
    模块中实现。是的,
    更新消息
    函数似乎会从队列返回新的
    popreceipt
    ,实际上,根据您的回答,在我的拉取请求之后:)