为什么Axios(使用async / await)会返回完整的承诺?

时间:2017-07-07 12:19:36

标签: javascript asynchronous axios

我对approach3 / async有疑问。这是我的代码:



await




但是它不是结果而是返回一个完整的promise,因此数据大量嵌套在promise中:

enter image description here

4 个答案:

答案 0 :(得分:3)

像哈哈说的那样,我认为你仍然需要解决这个承诺。如果你刚回来等待,你就会得到一个承诺。

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

答案 1 :(得分:2)

您必须返回数据:

const response = await axios.get(requestAddress, {params: params})
return response.data;

答案 2 :(得分:0)

在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>
        )
    }
}

答案 3 :(得分:0)

一个班轮:

return (await axios.get(url)).data;