在Promise.prototype.then()

时间:2018-07-28 07:10:32

标签: javascript promise

在讨论有关MDN Web文档的主题时,我遇到了一个示例

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

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

promise1.then(function(value) {
  console.log(value);
  // expected output: "Success!"
});

我是JS的初学者,我的疑问是关于promise1.then()内的函数中传递的参数

我们之前传递了字符串“成功!”在resolve()方法中。但是我们没有事先指定要分配给value变量的数据(该数据将在console.log()中传递)。凭直觉,我们是否应该明确定义var value = /* Data from Promise.resolve() */以便首先定义数据value携带什么,然后再将其传递到console.log()中?

否则,我可以将名称value更改为myVar,然后得到相同的结果:登录“成功!”。到控制台。

我尝试使用Google搜索,但是它没有帮助,因为我不知道我的问题与JS的主题有关。因此,请提供相关材料。谢谢!

2 个答案:

答案 0 :(得分:2)

  

我们之前传递了字符串“成功!”在resolve()方法中。但是我们没有事先指定要分配给value变量的数据(正在console.log()中传递)。

传递给函数参数的值是在调用函数时确定的。

调用它的代码是Promise库的一部分(即由其他人编写)。他们指定了它应该是什么。

  

直觉上,我们是否应该明确定义var value = / *来自Promise.resolve()的数据* /

不。编写Promise库的人已经做到了。

  

否则,我可以将名称值更改为任何值

是的。参数的名称不能确定传递给它们的值。这些职位。

答案 1 :(得分:0)

value只是您为.then()处理程序回调函数提供第一个参数的名称。您可以根据需要命名。无论您给它起什么名字,它都会得到.then()处理程序的第一个参数的值。所有功能都是这样。您可以随意命名参数,并且不会改变调用它们时获得的值。

  

否则,我可以将名称值更改为任何值,例如myVar,并得到相同的结果:记录“成功!”到控制台。

是的,您可以将参数的名称设为任意名称。无论您给它起什么名字,它将在调用函数时收到第一个参数。调用者确定参数将具有什么值。函数声明确定函数中第一个参数将具有的名称,以便您可以引用该第一个函数参数。

在这种情况下,该函数由Promise库的内部函数调用,当它调用.then()回调函数时,它将第一个传递的Promise的解析值作为第一个参数传递,您的情况就是您的{{ 1}}字符串。