在讨论有关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的主题有关。因此,请提供相关材料。谢谢!
答案 0 :(得分:2)
我们之前传递了字符串“成功!”在resolve()方法中。但是我们没有事先指定要分配给value变量的数据(正在console.log()中传递)。
传递给函数参数的值是在调用函数时确定的。
调用它的代码是Promise库的一部分(即由其他人编写)。他们指定了它应该是什么。
直觉上,我们是否应该明确定义var value = / *来自Promise.resolve()的数据* /
不。编写Promise库的人已经做到了。
否则,我可以将名称值更改为任何值
是的。参数的名称不能确定传递给它们的值。这些职位。
答案 1 :(得分:0)
value
只是您为.then()
处理程序回调函数提供第一个参数的名称。您可以根据需要命名。无论您给它起什么名字,它都会得到.then()
处理程序的第一个参数的值。所有功能都是这样。您可以随意命名参数,并且不会改变调用它们时获得的值。
否则,我可以将名称值更改为任何值,例如myVar,并得到相同的结果:记录“成功!”到控制台。
是的,您可以将参数的名称设为任意名称。无论您给它起什么名字,它将在调用函数时收到第一个参数。调用者确定参数将具有什么值。函数声明确定函数中第一个参数将具有的名称,以便您可以引用该第一个函数参数。
在这种情况下,该函数由Promise库的内部函数调用,当它调用.then()
回调函数时,它将第一个传递的Promise的解析值作为第一个参数传递,您的情况就是您的{{ 1}}字符串。