我试图模仿Promise功能,为了向后兼容,我遇到了一些问题。真的,它让我想知道如何实现这种功能。你知道,函数作为参数传递,然后执行函数参数。考虑Promise模式:
new Promise(function(function(){}, function(){}){});
所以,很清楚我寻找的模式是一个函数,在我的情况下至少需要一个函数,并且能够执行它的参数。
我试过
function testFunc(anotherFunc){
return anotherFunc(anotherFunc.arguments[0]());
}
console.log(testFunc(function(function(){ return 'help'; }){}));
没有成功。我该怎么做?我很难过。
答案 0 :(得分:2)
考虑这个例子,我已经重命名了函数以更紧密地匹配Promise命名约定。
function promiseFunc(executor) {
executor(function (data) {
console.log('Promise is resolved', data);
}, function (error) {
console.error('Promise is rejected', error);
})
}
promiseFunc(function (resolve, reject) {
setTimeout(function () {
if (Math.random() > 0.5) {
resolve('some result');
} else {
reject(new Error('some error'));
}
}, 100);
});
为了演示目的,它会随机调用/拒绝
答案 1 :(得分:-1)
function Fulfill(fulfillDenyFunc){
var t = this, df = [];
this.fulfilled = false;
fulfillDenyFunc(function(){
for(var i=0,l=df.length; i<l; i++){
df[i]();
}
t.fulfilled = true;
}, function(){
t.fulfilled = false;
});
this.then = function(doFunc){
if(this.fulfilled){
doFunc();
}
else{
df.push(doFunc);
}
return this;
}
}
onload = function(){
var ff = new Fulfill(function(yup, nope){
if(yup){
console.log('starting');
setTimeout(function(){
yup();
}, 4000);
}
else{
nope();
}
});
var what = {just:'trying', to:'slow', down:'then'};
setTimeout(function(){
ff.then(function(){
console.log('showing use of .then() after another Asychronous function');
});
}, 5000);
}