为什么 Axios (with async/await) return 是一个完整的承诺?
Why does Axios (with async/await) return a full promise?
我对 async
/await
有疑问。这是我的代码:
import axios from 'axios'
export default async function getRequestedData (requestAddress, params) {
return await axios.get(requestAddress, {params: params})
}
但是它 returns 不是结果,而是一个完整的承诺,因此数据大量嵌套在承诺中:
您必须return数据:
const response = await axios.get(requestAddress, {params: params})
return response.data;
就像河嘉说的,我觉得你还是要解决诺言。如果你只是 return await 你就会得到一个承诺。
const fs = require ('fs')
function getText () {
return new Promise( (resolve, reject) => {
fs.readFile('./foo.txt', 'utf8', (err, data) => {
if (err) {
reject(err)
}
resolve(data)
})
})
}
async function output () {
try {
let result = await getText()
console.log("inside try: ", result)
return result
}
catch (err){
console.log(err)
}
}
console.log("outside: ", output())
output().then( result => console.log("after then: ", result))
// outside: Promise { <pending> }
// inside try: foo text
// inside try: foo text
// after then: foo text
在 React 组件中你可以使用这个技巧:
function InitProduct() {
// Get your product from database
var productId = 'abc';
axios.get('/api/products/' + productId).then(response => {
$('.' + productId).text(response.data.ProductTitle);
});
return (<div className={productId}></div>)
}
export class TestNow extends Component {
render() {
return (
<div>
{InitProduct()}
</div>
)
}
}
一个班轮:
return (await axios.get(url)).data;
异步函数总是将它 returns 包装在一个 promise 中,因此您应该使用 then()
方法链接调用者,从而解析该 promise,例如:
getRequestedData (requestAddress, params).then (
(数据)=> {
...做一点事...
});
或者您可以 await
调用 getRequestedData
function
,在这种情况下,将提取返回的承诺中的数据,例如:
let requestedData = await getRequestedData (requestAddress, params):
我对 async
/await
有疑问。这是我的代码:
import axios from 'axios'
export default async function getRequestedData (requestAddress, params) {
return await axios.get(requestAddress, {params: params})
}
但是它 returns 不是结果,而是一个完整的承诺,因此数据大量嵌套在承诺中:
您必须return数据:
const response = await axios.get(requestAddress, {params: params})
return response.data;
就像河嘉说的,我觉得你还是要解决诺言。如果你只是 return await 你就会得到一个承诺。
const fs = require ('fs')
function getText () {
return new Promise( (resolve, reject) => {
fs.readFile('./foo.txt', 'utf8', (err, data) => {
if (err) {
reject(err)
}
resolve(data)
})
})
}
async function output () {
try {
let result = await getText()
console.log("inside try: ", result)
return result
}
catch (err){
console.log(err)
}
}
console.log("outside: ", output())
output().then( result => console.log("after then: ", result))
// outside: Promise { <pending> }
// inside try: foo text
// inside try: foo text
// after then: foo text
在 React 组件中你可以使用这个技巧:
function InitProduct() {
// Get your product from database
var productId = 'abc';
axios.get('/api/products/' + productId).then(response => {
$('.' + productId).text(response.data.ProductTitle);
});
return (<div className={productId}></div>)
}
export class TestNow extends Component {
render() {
return (
<div>
{InitProduct()}
</div>
)
}
}
一个班轮:
return (await axios.get(url)).data;
异步函数总是将它 returns 包装在一个 promise 中,因此您应该使用 then()
方法链接调用者,从而解析该 promise,例如:
getRequestedData (requestAddress, params).then (
(数据)=> {
...做一点事...
});
或者您可以 await
调用 getRequestedData
function
,在这种情况下,将提取返回的承诺中的数据,例如:
let requestedData = await getRequestedData (requestAddress, params):