If we go down the route of #3 then we need to decide what arguments get passed to the function. If people end up going different ways on this we'd have no interoperability, and this wouldn't be easy to change in a backwards compatible manner.
Do people prefer:
return new Promise(function (resolver) {
resolver.fullfill('foo');
});
(where resolver has properties for fulfill, reject, reportProgress, cancellationToken etc.)
or
return new Promise(function(fullfill, reject, progress, cancellationToken){
fullfill('foo');
});
(the order of these arguments is arbitrary now, but could never be changed once decided)
or
return new Promise(function (fullfill, reject, options) {
fullfill('foo');
});
(where options has properties for reportProgress, cancellationToken etc.)