promise, await, async


promise 的回调不会冒泡到 window

promise 可以多次 reject 或者 resolve,起作用的是第一次
Promise 对象用来进行延迟(deferred) 和异步(asynchronous ) 计算。Promise { , /}
p = new Promise(function(resolve, reject) {
resolve(f) 或者 resolve(r) // 都是fulfilled,这两个函数指向promise API的内部函数。
}); // 返回一个带结果的promise对象,将结果作为后面 then 方法的参数函数的参数继续传递。
p.then(function(f){},function(r){});
// f 是 p 结束(fulfilled)的返回值(resolve 或 reject 的参数)
// 返回一个带结果的 promise 对象,onRejected 或 onFulfilled 的 return值会传递给下一个then的onFulfilled,没有return时传递值为undefined,错误会传递给下一个then 的onRejected。链式调用时未处理的结果会传递下去,结束的回调函数是错误不会被外层的 promise 的 catch获取,不过可以在回调里面返回promise供外层promise获取错误。
var p1 = Promise.resolve({ then: function(onFulfill, onReject) { onFulfill("fulfilled!"); }});
// 返回一个带 fulfilled! 的 promise 对象。这种有 then 方法的对象叫 thenable。相当于new Promise()。

Promise.all([ sendService(data), (function() {
data.which = 3;
return sendService(data);
})()])//好像只有第二个promise对象中的data修改,实际上2个data都改变了。js预先解释了对象。
Promise.race(iterable); 尽快 返回 解决的值或者拒绝 的原因
Promise.try(fn); 方便统一使用 catch 来捕获异常,模拟try代码块,就像 Promise.catch 模拟catch代码块


await works with any "thenable", i.e. any object with a then method, even if it’s not a real promise
await 关键字是等待该语句的执行结果再执行后面的语句。包含await的函数必须写async
async function 固定会返回一个 Promise,不管函数体里面有没有显示调用 return
await 可以等待一个 Promise 对象 resolve,并拿到结果
通过使用 async/await,我们就可以配合 try/catch 来捕获异步操作过程中的问题,包括 Promise 中 reject 的数据。如果 try 范围内包含多个 await,那么 catch 会返回第一个 await 的值或错误。
// async await 是迭代器的语法糖(babel中用迭代器实现)