Javascript Promise.prototype.then()排序问题

时间:2019-01-05 17:41:01

标签: javascript

我是JS新手。 我刚去MDN网站 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then 玩给定的例子。 我将示例更改为

var promise1 = new Promise(function(resolve, reject) {
  resolve('Success!');
});

promise1
  .then(value => console.log(value))
  .then(console.log('1'))
  .then(console.log('2'))
  .then(console.log('3'))
  .then(console.log('4'))
  .then(console.log('5'));

我希望结果是成功!然后是1,一直到5。 但是,结果是1到5,然后是成功! 对我来说似乎有点奇怪。 我已经很好地链接了它,但没有“分支”它。非常感谢

2 个答案:

答案 0 :(得分:2)

您将console.log表达式的结果提供给then,而不是将在执行时记录数字的函数:

var promise1 = new Promise(function(resolve, reject) {
  resolve('Success!');
});

promise1
  .then(value => console.log(value))
  .then(() => console.log('1'))
  .then(() => console.log('2'))
  .then(() => console.log('3'))
  .then(() => console.log('4'))
  .then(() => console.log('5'));

答案 1 :(得分:-4)

那是因为您使用了then(console.log(...)),它将执行console.log并将结果用作传递给then的参数

是这样的:

var promise1 = new Promise(function(resolve, reject) {
  resolve('Success!');
});

var par1 = console.log('1'),
    par2 = console.log('2'),
    par3 = console.log('3'),
    par4 = console.log('4'),
    par5 = console.log('5');

promise1
  .then(value => console.log(value))
  .then(par1)
  .then(par2)
  .then(par3)
  .then(par4)
  .then(par5);