Javascript 反应组件类,can';不写异步方法?
我对异步不太了解,我不知道为什么在尝试编写一个简单的异步方法时,react组件中会出现语法错误Javascript 反应组件类,can';不写异步方法?,javascript,reactjs,asynchronous,Javascript,Reactjs,Asynchronous,我对异步不太了解,我不知道为什么在尝试编写一个简单的异步方法时,react组件中会出现语法错误 类位置扩展React.Component{ 建造师(道具){ 超级(道具); this.searchProducts=this.searchProducts.bind(this); } 异步搜索产品(产品名称、存储ID){ let response=等待axios.get( `https://api.goodzer.com/products/v0.1/search_in_store/?storeId
类位置扩展React.Component{
建造师(道具){
超级(道具);
this.searchProducts=this.searchProducts.bind(this);
}
异步搜索产品(产品名称、存储ID){
let response=等待axios.get(
`https://api.goodzer.com/products/v0.1/search_in_store/?storeId=${storeId}&query=${product_name}&apiKey=125cbddf3880cb1ba652a7c269ba1eb0`
);
控制台日志(响应);
返回响应.数据.产品;
}
组件willmount(){
让产品=[];
this.props.searchLocations(this.props.navigation.state.params.product_name,this.props.navigation.state.params.searchRadius)
.那么(
产品=(this.props.locations.map(
location=>({[location.id]:this.searchProducts)(
this.props.navigation.state.params.product_name,location.storeid
)}))
)
);
控制台日志(产品);
}
render(){
const displayLocations=this.props.locations.map(
location=>({location.name})
);
返回(
你好
{displayLocations}
);
}
}
您的组件didmount
函数在语法上无效。您没有为then
调用提供正确的函数。另外,您的控制台.log
应该在then调用中。语法错误在
.then(
products = /* missing `>` at arrow function */ (this.props.locations.map(
location => ({[location.id]: this.searchProducts(
this.props.navigation.state.params.product_name, location.storeid
)}))
)
)
.then()
需要一个函数作为参数,this.searchProducts()
返回一个Promise
对象,async
也需要在.map()
回调函数中设置
async componentWillMount() {
let products = await this.props
.searchLocations(
this.props.navigation.state.params.product_name,
this.props.navigation.state.params.searchRadius
)
.then(
() =>
Promise.all(this.props.locations.map(async(location) =>
({[location.id]: await this.searchProducts(
this.props.navigation.state.params.product_name,
location.storeid
)}))
)
);
console.log(products);
}
你在用巴贝尔吗?您可以共享您的babel配置吗?错误发生在哪一行?注意,
this.searchProducts()
返回一个Promise
object这就是babelrc<代码>{“presets”:[“babel preset expo”],“env”:{“development”:{“plugins”:[“transform react jsx source”]}}}}错误在第32行。此外,我认为使用“await”意味着函数返回时“response”将不再是承诺?我替换了我的.then()经过你的修改,但我仍然得到语法错误:wait是一个保留字
@killer\u manatee请参阅更新的帖子<需要在使用await
的函数中设置code>async,也就是说,在.map()
callbackOk,语法错误消失。你知道我将如何得到Promise.all的结果并将其存储在数组中吗?我想要的是一个对象数组,location.id作为键,searchProducts的结果作为值。感谢产品
是阵列。没有尝试过reactjs,不确定是否应该从组件willmount
返回产品
?我对如何访问promise最终返回的数据感到困惑。promise不应该最终返回一个对象数组吗?我读了一些关于承诺的书,但我不明白当承诺解决时如何“得到”它们