Blo*_*som 3 curly-braces reactjs es6-promise fetch-api
在从 API 获取响应的简单 React 应用程序中,以下带有大括号的代码的结果数据值为undefined。
fetch('http://localhost:8000/track/?id='+this.state.input)
.then(res => {res.json()}) //Note Curly braces around {res.json()}
.then((data) => {
console.log(data);
Run Code Online (Sandbox Code Playgroud)
然而,当花括号被删除时,令人惊讶的是它在控制台中获取并打印了响应数据。
fetch('http://localhost:8000/track/?id='+this.state.input)
.then(res => res.json()) //No Curly braces - then works fine
.then((data) => {
console.log(data);
Run Code Online (Sandbox Code Playgroud)
Promise 函数周围有大括号的这种行为的原因是什么?是不是不能使用大括号?为什么?不过 Promise 有点令人困惑。
当您使用箭头函数时,对于非常简单的函数,您可以省略花括号。这将隐式返回箭头后面表达式的结果。通过示例可以最好地解释这一点。让我们从一个简单的函数开始:
var foo = () => {
return 'bar';
}
Run Code Online (Sandbox Code Playgroud)
这可以简化为这一行:
var foo = () => { return 'bar' }
Run Code Online (Sandbox Code Playgroud)
可以进一步缩短为(删除花括号和return语句):
var foo = () => 'bar';
Run Code Online (Sandbox Code Playgroud)
对于您的情况,您可以将您发布的代码视为如下:
.then(res => {
res.json()
})
Run Code Online (Sandbox Code Playgroud)
上面的函数不返回任何内容,这是问题的根源。你真正想要的是这样的:
.then(res => {
return res.json()
})
Run Code Online (Sandbox Code Playgroud)
可以这样缩短:
.then(res => { return res.json() }) // one-liner with curlys
.then(res => res.json()) // without curlys
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |