1 Promise 新建後就會立即執行
2 調用 resolve 或 reject 並不會終結 Promise 的參數函數的執行
3 Promise 內部的錯誤不會影響到 Promise 外部的代碼
4 finally 方法的回調函數不接受任何參數,本質上是 then 方法的特例
5 finally 方法總是返回原來的值
6 Promise.reject()方法的參數,會原封不動地作爲 reject 的理由,變成後續方法的參數
function getFoo() {
console.log('執行getFoo');
return new Promise(function (resolve, reject) {
resolve('foo');
});
}
const g = function* () {
try {
// next方法將指針移到getFoo()才執行函數getFoo
// 第一次調用next方法,執行到getFoo()結束,此時還沒有給foo賦值
console.log(111);
const foo = yield getFoo();
// yield表達式本身沒有返回值,或者說總是返回undefined。
// next方法可以帶一個參數,該參數就會被當作上一個yield表達式的返回值
// 第二次調用next方法(此時帶參數'foo'),纔給foo賦值,並打印foo
console.log(foo);
} catch (e) {
console.log(e);
}
};
function run(generator) {
const it = generator(); // 生成遍歷器對象
function go(result) {
console.log('result', result);
if (result.done) return result.value;
return result.value.then(function (value) {
console.log('value', value);
return go(it.next(value));
}, function (error) {
return go(it.throw(error));
});
}
go(it.next());
}
run(g);