Я думаю, вам нужно больше о async/await
в JS.
An async function
всегда возвращает обещание.Так что x
в Wrapper
- это обещание.Поскольку вы не используете await/async
.
Это должно быть так.
async Wrapper = (body) => {
try{
let x = await this.Send(body); // <-- missing await here
return x;
}catch(e){console.log(e)}
}
Но тогда код в render
не работает.потому что this.Wrapper()
теперь возвращает обещание.-> returnData is a promise
.И метод render
не может быть асинхронной функцией :)
render(props) {
//...
const returnData = this.Wrapper(jsonBody) // <-- returnData here is a promise.
//...
Таким образом, чтобы все заработало.
Вы должны использовать state
.Позвоните на номер this.Wrapper
в componentDidMount
или componentDidUpdate
.Например:
constructor() {
// ...
this.state = { returnData: null }
}
async componentDidMount() {
const returnData = await this.Post(...); // Using await to get the result of async func
this.setState({ returnData });
}
async Post(body) {
try{
const options = {
method: 'POST',
uri: 'XXXXXXXXXXXXXXXXXXXX',
body: body
}
return rp(options); // define await then return is unnecessary
}catch(e){console.warn(e)}
}
render() {
const { returnData } = this.state;
// ... Do the rest
}