asyncfuture
asyncfuture copied to clipboard
Add `contextObject` to function `subscribe`
Considering this situation: Display a dialog, and then use AsyncFuture to send a network request, and the result will be displayed on the interface when the network request responds. I used the following logic (pseudo code):
Dialog::request()
{
auto future = ... ; // request data from network
observe(future).subscribe([=](QString data){ // onComplete
ui->label->setText(data);
},
[=](){ // onCanceled
ui->errorLabel->setText("error");
});
}
But before the network reply, the user may close the dialog. In this case, the ui->label in onComplete has been destroyed, causing a crash.
Is there any plan to add contextObject to function subscribe? So I can modify code like this
Dialog::request()
{
auto future = ... ; // request data from network
- observe(future).subscribe([=](QString data){ // onComplete
+ observe(future).subscribe(this, [=](QString data){ // onComplete
ui->label->setText(data);
},
[=](){ // onCanceled
ui->errorLabel->setText("error");
});
}
You can use observe(future).context(ui-label, {}, {} ) function instead of subscribe(). I've fixed a bunch of bugs on my fork.