为什么JavaScript在React和node中的Sync/Async行为不同?
这是我的React项目中的代码 如果阅读onSearchSubmit函数writenline:3+unsplash是axios.create调用 这是一个简单的代码 等待 对于第二行,当它结束时,执行下一行 有什么区别?这两个都是JS代码,但对我来说,它们的行为不同。unsplash.get返回一个承诺 它返回一个需要解决的承诺。只要它没有被解析,它就不会返回任何内容,因此响应将是未定义的。要解决这个问题,您可以像以前一样在异步函数中使用wait,告诉代码等待结果: const response=wait unsplash.get; 或者你可以用经典。然后 去鞭笞 .thenresponse=>{ //…继续这里 } .catcherror=>{ //…错误处理程序 }; readFileSync是一个同步操作,不返回承诺 由于这是一个正常的同步函数,因此默认情况下,代码仅在该函数完成后继续。unsplash.get返回一个承诺 它返回一个需要解决的承诺。只要它没有被解析,它就不会返回任何内容,因此响应将是未定义的。要解决这个问题,您可以像以前一样在异步函数中使用wait,告诉代码等待结果: const response=wait unsplash.get; 或者你可以用经典。然后 去鞭笞 .thenresponse=>{ //…继续这里 } .catcherror=>{ //…错误处理程序 }; readFileSync是一个同步操作,不返回承诺 由于这是一个正常的同步函数,因此默认情况下,您的代码仅在该函数完成后继续运行。axios.get函数是异步的,因此您必须使用wait以使响应变量可用,而fs.readFileSync是一个同步函数,其名称正确,asynchronous版本是fs.readFile,因此代码会等待它完成。axios.get函数是异步的,因此必须使用wait才能使用响应变量,而fs.readFileSync是一个同步函数,它的名称正确,Asynchronous版本是fs.readFile,因此代码等待它完成。根据,它引用了 同步表单会阻止Node.js事件循环和进一步的JavaScript执行,直到操作完成 因此,readFileSync是一种同步方法,它将等待操作完成,然后再进行另一个操作。即使在它的节目中 返回:字符串|缓冲区 仅供参考,readFile也有一个根据,它引用了 同步表单会阻止Node.js事件循环和进一步的JavaScript执行,直到操作完成 因此,readFileSync是一种同步方法,它将等待操作完成,然后再进行另一个操作。即使在它的节目中 返回:字符串|缓冲区 仅供参考,readFile还有一个为什么JavaScript在React和node中的Sync/Async行为不同?,javascript,node.js,reactjs,async-await,Javascript,Node.js,Reactjs,Async Await,这是我的React项目中的代码 如果阅读onSearchSubmit函数writenline:3+unsplash是axios.create调用 这是一个简单的代码 等待 对于第二行,当它结束时,执行下一行 有什么区别?这两个都是JS代码,但对我来说,它们的行为不同。unsplash.get返回一个承诺 它返回一个需要解决的承诺。只要它没有被解析,它就不会返回任何内容,因此响应将是未定义的。要解决这个问题,您可以像以前一样在异步函数中使用wait,告诉代码等待结果: const response
class App extends React.Component {
state = { images: [] };
onSearchSubmit = async term => {
const response = await unsplash.get('/search/photos', {
params: { query: term }
});
this.setState({ images: response.data.results });
};
render() {
return (
<div className='ui container' style={{ marginTop: '10px' }}>
<SearchBar onSubmit={this.onSearchSubmit} />
<ImageList images={this.state.images} />
</div>
);
}
}
const fs = require('fs');
const input = fs.readFileSync('input.txt', 'utf-8');
console.log(input);