为了加强我对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属性??