任何紧凑的方式来承诺作为序列?

时间:2015-10-18 22:12:06

标签: javascript promise

在这里,我希望一个接一个地解决这个承诺。 Q.when似乎是价值观的好包装。如果我已经拥有一系列Promise,除了使用.then(function(){return next();})之外,还有一种紧凑的方法吗?

Here is my JSBin.以及相关的JavaScript:

function wrap(v) {
  var defer = Q.defer();
  window.setTimeout(function() {
    console.log('okay, fine!');
    defer.resolve(v);
  }, 3000);
  return defer.promise;
}
/*
wrap(1)
  .then(function() {
    return wrap(3);
  })
  .then(function(v) {
    console.log(v);
  });
*/

/* map result is an array of promise
when using reduce, it will resolve one by one. 
*/

[1, 3, 4, 5].map(wrap)
  .reduce(Q.when, Q(undefined))
  .then(function(v) {
    console.log(done);
  });

1 个答案:

答案 0 :(得分:0)

我在Q&#39的github回购中找到了这个。它似乎在reduce函数中我们仍然可以使用.then

Q.when不应该与promise一起使用。



function wrap(v) {
  var defer = Q.defer();
  window.setTimeout(function() {
    document.body.innerHTML += ('okay, fine! here is ' + v + '<br/>');
    defer.resolve(v);
  }, 3000);
  return defer.promise;
}

[1, 3, 4, 5]
.reduce(function(soFar, f) {
  return soFar
    .then(function(v) {
      return wrap(f);
    });
}, Q(undefined));
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/q.js/1.0.1/q.js"></script>
&#13;
&#13;
&#13;