ananas icon indicating copy to clipboard operation
ananas copied to clipboard

可以中断then的future 链吗

Open nqf opened this issue 3 years ago • 1 comments

ananas::MakeReadyFuture()
	.Then([] {
		throw std::runtime_error("rrrrrrrrrrrrrrrrrrr");
		return std::string{"Hello1"};
	})
	.Then([](ananas::Try<std::string>&& str) {
		try {
			std::string a = str;
			std::cout << a << std::endl;
			return 100;
		} catch (const std::runtime_error&) {
			std::cout << "xxxxxx" << std::endl;
                           // 希望发生异常以后 退出 这个回调链
			return 888;
		}
	})
	.Then([](int nn) {
		std::cout << nn << std::endl;
	});

nqf avatar Jul 01 '21 09:07 nqf

目前有点受限制,Then接受的lambda必须以Future为参数,也就是前面的一个Then发起的是另外一个异步操作。 例如:

ananas::MakeReadyFuture()
	.Then([] {
		return ananas::Future<std::string>(); // 返回空的future,表示中断调用链
	})
	.Then([](Try<std::string>&& fut) {
                cout << "Never reach here" << endl;
	});

loveyacper avatar Jul 15 '21 12:07 loveyacper