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

 

 

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