在此示例Promise实现中,为什么检查解析器是否具有.then?

时间:2018-10-30 17:44:56

标签: javascript promise es6-promise

为了加强我对JavaScript的Promise API的理解,我一直在基于this excellent example of an implementation的JavaScript中研究this Stackoverflow answer

但是,我发现它是完整格式的(请参阅网站),很难将我的头放在所有回调和包装的值上。因此,我将其简化为无法与.catch()一起使用并且不能保证解析程序功能(传递给{ "30", "10", "2018" }的函数)不会多次调用new Promise(this_function_here)的功能。下方:

resolve()

还有一个示例来演示我目前感兴趣的功能,直到我可以更好地掌握错误处理为止:

const PENDING = 0;
const FULFILLED = 1;
const REJECTED = 2;

function MyPromise(executor) {
    let state = PENDING;
    let value = null;
    let handlers = [];

    function fulfill(result) {
        state = FULFILLED;
        // In the promise website, this result would have been checked]
        // before right now to see if it has a .then property, why? 
        value = result;
        handlers.forEach(handle);
        handlers = null;
    }

    function handle(handler) {
        if (state === PENDING) {
            handlers.push(handler);
        } else {
            if (state === FULFILLED && typeof handler.onFulfilled === 'function') {
                handler.onFulfilled(value);
            }
        }
    }

    this.then = function (onFulfilled) {
        return new MyPromise(function (resolve) {
            setTimeout(function () {
                handle({
                    onFulfilled: function (result) {
                        return resolve(onFulfilled(result));
                    }
                })
            }, 0)
        });
    }

    executor(fulfill);

}

我正在重新构建基本示例,使其等同于promisejs网站上的给定示例,但是我无法弄清楚function fetch_and_callback(resolve) { setTimeout(() => { resolve('hello') }, 1000) }; const do_async = new MyPromise(fetch_and_callback); function printer(value) { console.log('printer coming'); console.log(value); } function modifier(result) { return result + 'has been modified' } do_async.then(modifier).then(printer); 函数的意义。它需要一个包装的“结果”(一个解析值),并检查它是否具有.then属性。这可以保证什么用例?该函数如下所示:

getThen

,它将在我在function getThen(value) { var t = typeof value; if (value && (t === 'object' || t === 'function')) { var then = value.then; if (typeof then === 'function') { return then; } } return null; } 函数中的注释之前的某处,检查fulfill参数是否具有result属性。

在promisejs示例Promise实现中,为什么实现要检查以查看解析的值是否具有.then属性?

0 个答案:

没有答案