我正在使用 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();
});})