-
无法取消
Promise
,一旦新建它就会立即执行,无法中途取消。
- 如果不设置回调函数,
Promise
内部抛出的错误,不会反应到外部。
- 当处于
Pending
状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
var promise = new Promise(function(resolve,reject) {
// ... some code
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
promise.then((value) {
success
},(error) {
failure
});
getJSON("/posts.json").then((posts) {
...
}).catch( 处理 getJSON 和 前一个回调函数运行时发生的错误
console.log('发生错误!',error);
});
p.then((val) => console.log("fulfilled:"catch((err) => console.log("rejected:" 等同于
p.then((val) => console.log(fulfilled:"
bad
promise
.then((data) {
success
},1)">(err) {
error
});
good
function(data) { cb
success
})
. error
});
var p = Promise.all([p1,p2,p3]);
- 只有
p1
、p2
、p3
的状态都变成fulfilled
,p
的状态才会变成fulfilled
,此时p1
、p2
、p3
的返回值组成一个数组,传递给p
的回调函数。
- 只要
p1
、p2
、p3
之中有一个被rejected
,p
的状态就变成rejected
,此时第一个被reject
的实例的返回值,会传递给p
的回调函数。
生成一个Promise对象的数组
var promises = [2,3,5,7,11,13].map( (id) {
return getJSON("/post/" + id + ".json");
});
Promise.all(promises).then( (posts) {
(reason){
...
});
var p = Promise.race([p1,p3]);
var p = Promise.race([
fetch('/resource-that-may-take-a-while'), (resolve,reject) {
setTimeout(() => reject(new Error('request timeout')),5000)
})
])
p.then(response => console.log(response))
p.catch(error => console.log(error))
var jsPromise = Promise.resolve($.ajax('/whatever.json'));
Promise.resolve('foo')
等价于
new Promise(resolve => resolve('foo'))
let thenable = {
then: );
}
};
let thenable =);
}
};
let p1 = Promise.resolve(thenable);
p1.then((value) {
console.log(value); 42
});
var p = Promise.resolve('Hello');
p.then( (s){
console.log(s)
});
Hello
Promise.resolve();
p.then( () {
...
});
var p = Promise.reject('出错了');
var p = new Promise((resolve,reject) => reject('出错了'))
p.then(null,1)"> 出错了
done()
asyncFunc()
.then(f1)
.catch(r1)
.then(f2)
.done();
Promise.prototype.done = (onFulfilled,onRejected) {
this.then(onFulfilled,onRejected)
. (reason) {
抛出一个全局错误
setTimeout(() => { throw reason },0);
});
};
finally()
server.listen(0)
.then( () {
run test
finally(server.stop);
Promise.prototype.finally = (callback) {
let P = .constructor;
return .then(
value => P.resolve(callback()).then(() => value),reason => P.resolve(callback()).then(() => { throw reason })
);
};