参数的值如何分配给此函数?

时间:2016-03-31 19:30:37

标签: javascript promise ecmascript-6 es6-promise

我正在通过承诺教程,我无法理解参数toss如何从function tossASix()分配值。如果有人可以花时间解释它,那将非常感激。

function dieToss() {
  return Math.floor(Math.random() * 6) + 1;  
}

function tossASix() {
  return new RSVP.Promise(function(fulfill, reject) {
    var n = Math.floor(Math.random() * 6) + 1;
    if (n === 6) {
      fulfill(n);
    } else {
      reject(n);
    }
  });
}

function logAndTossAgain(toss) {
  console.log("Tossed a " + toss + ", need to try again.");
  return tossASix();
}

function logSuccess(toss) {
  console.log("Yay, managed to toss a " + toss + ".");
}

function logFailure(toss) {
  console.log("Tossed a " + toss + ". Too bad, couldn't roll a six");
}

tossASix()
  .then(null, logAndTossAgain)   //Roll first time
  .then(null, logAndTossAgain)   //Roll second time
  .then(logSuccess, logFailure); //Roll third and last time

2 个答案:

答案 0 :(得分:1)

。然后接受两个参数,这两个参数实际上都是单个参数函数。在前两个版本中,您的履行函数都是空的,而拒绝函数是logAndTossAgain(折腾)。 Promise将根据其中的标准调用履行功能或拒绝功能(在这种情况下,随机结果是否为6)。因此,随机卷的值n然后传递给logAndTossAgain函数(如果它不是6)。这就是你对折腾参数的价值。

答案 1 :(得分:0)

.then隐式传递参数。

根据promise specification

  

如果onFulfilled是一个函数:   必须在承诺履行后调用,并将承诺的价值作为其第一个参数。

关于传递参数:

.then(foo)

相同
.then(function(val) { 
    foo(val) 
})

(在其他方面,这两个代码块不相等)