【发布时间】:2021-05-09 03:37:33
【问题描述】:
我有以下代码:
function MyPromise(configFunction) {
let nextSuccessCallBack = undefined;
let nextResolve = undefined;
configFunction(function(message){
setTimeout(function(){
if(nextSuccessCallBack) {
var result = nextSuccessCallBack(message);
if(result && result.then) {
result.then(nextResolve);
} else {
nextResolve && nextResolve(result);
}
}
})
});
return {
then: function(successCallback) {
nextSuccessCallBack = successCallback;
return new MyPromise(function(resolve) {
nextResolve = resolve;
})
}
}
}
new MyPromise(function(resolve, reject) {
resolve('new message');
}).then(function(message) {
console.log(message);
return 'another message'
}).then(function(message) {
console.log(message)
console.log('here')
})
在这个例子中,nextSuccessCallBack 似乎被设置为.then 中的回调函数,然后它在 setTimeout 函数中的值现在被填充。然而,这让我很困惑。我想当我们到达构造函数中的return语句时,我们返回对象并有效地停止函数?如果是这种情况,那么程序如何到达setTimeout?
【问题讨论】:
-
configFunction被调用(这是传递给MyPromise的回调),它调用resolve(这是传递给configFunction的回调),它调用setTimeout。 -
这是一个非常糟糕的
Promise实现。我根本不像一个真正的承诺那样工作。
标签: javascript promise settimeout es6-promise