0

我正在使用 facebook 愚蠢将 2 个 io 代码链接到一个地方,我尝试了两种不同的方法,我不知道为什么只有第二种成功,这里是代码。

// FillCandidateResponse and ISearchCallbackCommon will do some io and return future
folly::Future<vector<int>> RequestHandlerV2::FillCandidateResponse() {
  ...
  return folly::collect(ambition::rtdb::RTDBClient::GetInstance()->RTDBOperation(handler_sptr->rtdb_request_)).toUnsafeFuture(); // query kv async
}

folly::Future<vector<int>> RequestHandlerV2::ISearchCallbackCommon() {
  ...
  return folly::collect(ambition::rtdb::RTDBClient::GetInstance()->RTDBOperation(product_rtdb_request_)).toUnsafeFuture().via(&folly::InlineExecutor::instance()); // query kv async
}

// this is the failed version
handler->FillCandidateResponse()
  .then([=](auto &&){
    handler->QueryBatchBannerCallback();
    return handler->ISearchCallbackCommon();
  })
  .then([=](auto &&){
    handler->CollectCustomizedItems();
  });

// this is the succ version
handler->FillCandidateResponse()
  .then([=](auto &&){
    handler->QueryBatchBannerCallback();
    handler->ISearchCallbackCommon()
    .then([=](auto &&){
      handler->CollectCustomizedItems();
    });})
4

0 回答 0