Значение обещания устанавливается дважды - PullRequest
0 голосов
/ 10 июля 2020
• 1000 снова выкидывает ошибку: folly :: PromiseAlreadySatisfied: обещание уже выполнено. Даже я мог бы выделить исключение, которого было бы достаточно, так как я могу использовать его в своем будущем для обработки сценария.

Как мне обойти эту проблему? Используется ли для этого какой-то шаблон дизайна?

folly::Future<bool> asyncMethodB(std::shared_ptr<folly::Promise<bool>> promise) { // <=== This could happen multiple times.
  return asyncMethod()
      .thenValue([promise](folly::Future<bool> result) {
        bool success = std::move(result).get();
        if (success) {
          promise->setValue(true);     // <=== This could happen multiple times.
        } else {
          promise->setValue(false);    // <=== This could happen multiple times.
        }
        return success;
      })
      .thenError([promise](const folly::exception_wrapper& e) {
        promise->setValue(false);     // <=== This could happen multiple times.
        return false;
      });
}

void syncMethod() {
  std::shared_ptr<folly::Promise<bool>> promise =
      std::make_shared<folly::Promise<bool>>();
  folly::Future<bool> future1 = promise->getFuture();
  ( Some thread pool call ) => asyncMethodB(promise);
  future1.wait();
  bool finalRes = future1.value();
  if (!finalRes) {
    throw InvalidArgumentException("Some error message");
  }
  LOG(INFO) << "Value in Future:" << future1.value();
}
...