【问题标题】:Promise flow control承诺流控制
【发布时间】:2017-12-14 14:56:49
【问题描述】:

我有三个资源:

  1. 酒店
  2. 地址
  3. 图片

一家酒店可以有一个地址,但可以有很多张图片。在一次保存所有三个时,我需要保存酒店详细信息,然后获取酒店 ID,我应该将其与地址和每张图片相关联并一张一张保存。

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

在给定关系约束的情况下保存所有资源的 Promise 链流应该是什么。

让我更清楚一点,我想要类似的东西:

  A
 / \
B   C

机器人 B 和 C 得到 A 返回的相同值。

【问题讨论】:

  • 听起来你可以将地址保存和所有图像保存合并到同一个Promise.all()
  • 向我们展示您的尝试。 Stackoverflow 不是免费的代码编写服务。目标是在您的代码未按预期工作时帮助您修复它,而不是为您完成工作

标签: javascript node.js promise es6-promise


【解决方案1】:

你可以这样做:

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);
  })

【讨论】:

  • 我也很惊讶,无论如何,如果我需要新创建的酒店 ID 而不是 Done 怎么办?
猜你喜欢
  • 1970-01-01
  • 2017-05-12
  • 2016-05-07
  • 2013-12-15
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
相关资源
最近更新 更多