co
co copied to clipboard
co handling of return value
I wonder why co yields return value by default.
This is an example:
co(function *asyncFn() {
let browser = yield someAsyncOperation();
return browser;
}).then(browser => browser.exit());
In the case when browser object has then method, co tries to resolve it, but I (obviously in this case) do not want such a behaviour. I know that co simply passes return value to Promise resolve callback, but implementation can be changed if needed.
Basically, I want to decide on my own if I need the returned value to be resolved as a promise. This could be achieved with such a syntax:
return browser; // simply return what I requested to, no resolving
return yield browser; // resolve browser as a promise and return it
Will be very thankful for any feedback on this issue.
@tj your short answer would be highly relevant.
return yield browser is not possible to detect. Because JS interpretation will be like:
return (yield browser)
or the same
let result = yield browser;
return result;
@DeShadow you've misunderstood me. I was talking about returning thenable object without trying to resolve it.
@jakwuh I understand. I try to say that it's not possible. Because co can't know is construction return val or return yield val.
You can write return { browser }, but co* also check all properties of returned object and wait to Promise.all() of them.
I don't know, how to help you :(
@DeShadow I got you. Seems like this is the only possible solution for now. Thank you for the response.