promise筆記

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);

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章