Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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
Javascript 承诺流量控制_Javascript_Node.js_Promise_Es6 Promise - Fatal编程技术网

Javascript 承诺流量控制

Javascript 承诺流量控制,javascript,node.js,promise,es6-promise,Javascript,Node.js,Promise,Es6 Promise,我有三个资源: 酒店 地址 形象 一家酒店可以有一个地址,但可以有许多图像。在一次保存所有三张图片时,首先我需要保存酒店详细信息,然后获取酒店id,我应该将其与地址和每张图片关联,并逐个保存 现在,我认为我可以并行保存图像和地址,如果出现故障,我应该能够回滚事务。在保存图像时,我知道我可以使用Promise.all 在给定关系约束的情况下,在保存所有资源的同时,承诺链流应该是什么 让我更清楚地说,我想要的是: A / \ B C 当机器人B和C获得A返回的相同值时。您可以这样做: f

我有三个资源:

  • 酒店
  • 地址
  • 形象
  • 一家酒店可以有一个地址,但可以有许多图像。在一次保存所有三张图片时,首先我需要保存酒店详细信息,然后获取酒店id,我应该将其与地址和每张图片关联,并逐个保存

    现在,我认为我可以并行保存图像和地址,如果出现故障,我应该能够回滚事务。在保存图像时,我知道我可以使用
    Promise.all

    在给定关系约束的情况下,在保存所有资源的同时,承诺链流应该是什么

    让我更清楚地说,我想要的是:

      A
     / \
    B   C
    

    当机器人B和C获得A返回的相同值时。

    您可以这样做:

    function createHotel(data) {
      // Create your hotel
    }
    
    function createAddresses(addresses, hotelId) {
      // Create addresses with hotelId
    }
    
    function createImages(images, hotelId) {
      // Create images with hotelId
    }
    
    createHotel({ name: 'Test' })  // I don't know your structure, this is just placeholder
      .then(function(hotel) {
        return Promise.all([
          createAddresses(addresses, hotel.id),
          createImages(images, hotel.id)
        ]);
      })
      .then(function() {
        // Everything was created successfully
        console.log('Done!');
      })
      .catch(function(err) {
        // Rollback here
        console.log(err);
      })
    

    听起来您可以在同一个
    Promise.all()
    中将地址保存和所有图像保存合并在一起,向我们展示您的尝试。Stackoverflow不是免费的代码编写服务。我们的目标是在代码无法按预期工作时帮助您修复代码,而不是为您工作我也很惊讶,不管怎样,如果我需要新创建的酒店id而不是
    Done
    ,该怎么办?