Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应组件类,can';不写异步方法?_Javascript_Reactjs_Asynchronous - Fatal编程技术网

Javascript 反应组件类,can';不写异步方法?

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组件中会出现语法错误

类位置扩展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不应该最终返回一个对象数组吗?我读了一些关于承诺的书,但我不明白当承诺解决时如何“得到”它们