https://github.com/petkaantonov/bluebird/blob/master/API.md#cancellation
http://jsbin.com/dadala/1/edit?html,js,output
function a(value) {
return Promise.resolve(value);
}
function b() {
return Promise.resolve('b');
}
function c() {
return Promise.resolve('c');
}
var p = a(null).then(function(value) {
console.log(value);
if (value === null) {
return p.cancel();
}
return b();
}).then(function(value) {
console.log(value);
return c();
}).then(function(value) {
console.log(value);
}).cancellable().catch(Promise.CancellationError, function(error) {
console.log('cancelled');
});
https://github.com/google/closure-library/blob/master/closure/goog/promise/promise.js
http://jsbin.com/hurobo/1/edit?html,js,output
function a(value) {
return goog.Promise.resolve(value);
}
function b() {
return goog.Promise.resolve('b');
}
function c() {
return goog.Promise.resolve('c');
}
var p = a(null).then(function(value) {
console.log(value);
if (value === null) {
return p.cancel();
}
return b();
}).then(function(value) {
console.log(value);
return c();
}).then(function(value) {
console.log(value);
}).thenCatch(function(error) {
if (error instanceof goog.Promise.CancellationError) {
console.log('cancelled');
}
});
- キャンセルというかエラーハンドリング
p.cancel()
はthrow new Promise.CancellationError()
とも書ける(pの参照がない時はこうなる)- errorの型を見てキャンセルかどうか判定するのがつらい
- CancellationErrorが実装依存になり標準化できない
- PromisesA+/cancellation-specには
CancellationError
があるけど、状況がよく分からない
- PromisesA+/cancellation-specには
- Promiseのキャンセルはどうあるべき?