试图模仿承诺的问题

时间:2017-10-24 10:35:51

标签: javascript promise

我试图模仿Promise功能,为了向后兼容,我遇到了一些问题。真的,它让我想知道如何实现这种功能。你知道,函数作为参数传递,然后执行函数参数。考虑Promise模式:

new Promise(function(function(){}, function(){}){});

所以,很清楚我寻找的模式是一个函数,在我的情况下至少需要一个函数,并且能够执行它的参数。

我试过

function testFunc(anotherFunc){
  return anotherFunc(anotherFunc.arguments[0]());
}
console.log(testFunc(function(function(){ return 'help'; }){}));

没有成功。我该怎么做?我很难过。

2 个答案:

答案 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);
}