programing

함수에서 비동기 대기를 사용하여 비동기 함수에서 값을 반환하는 방법은 무엇입니까?

lovejava 2023. 10. 21. 09:49

함수에서 비동기 대기를 사용하여 비동기 함수에서 값을 반환하는 방법은 무엇입니까?

비동기 함수에서 값을 반환하려면 어떻게 해야 합니까?이걸 좋아하려고 했습니다.

const axios = require('axios');
async function getData() {
    const data = await axios.get('https://jsonplaceholder.typicode.com/posts');
    return data;
}
console.log(getData());

이걸 돌려주는 거지

Promise { <pending> }

할 수 없습니다await밖에 있는 것async범위. 예상 결과를 얻으려면 당신은 당신의console.log비동기적인 IIFE로 즉.

async function getData() {
  return await axios.get('https://jsonplaceholder.typicode.com/posts');
}

(async () => {
  console.log(await getData())
})()

Working 견본을 보다

에 대한 자세한 정보

부터axios약속을 돌려줍니다.async/await에 대해서는 생략할 수 있습니다.getData기능은 다음과 같습니다.

function getData() {
  return axios.get('https://jsonplaceholder.typicode.com/posts');
}

그리고 전에 했던 것과 똑같이 해요.

(async () => {
   console.log(await getData())
})()

함수 getData가 약속을 반환합니다.

따라서 다음 중 하나를 수행할 수 있습니다.

  • await결과를 얻을 수 있는 기능도 있습니다.하지만, 사용할 수 있다는 것은await, 당신은 안에 있어야 합니다.asyncfunction, 그래서 당신은 이것을 'wrap'해야 합니다.

    async function callAsync() {
       var x = await getData();
       console.log(x);
    }
    callAsync();
    

    (나는 명확한 이유로 함수의 이름을 지었지만, 이 시나리오에서는 익명 함수 호출을 사용할 것입니다. The Reason의 답변을 참조하십시오.)

아니면

  • 결과를 비동기 함수가 반환하는 일반 약속으로 사용합니다.
    사용해야 합니다.then콜백과 함께:

    getData().then(x => { 
        console.log(x); 
    });
    

다른 답변들은 이 문제를 잘 다루었습니다. 하지만 저는 이 문제를 해결하기 위해 노력하고 있습니다.main글로벌 범위에서 일을 실행하는 것보다 기능합니다. 즉.

async function main(){
  let result = await getData();
}

main().catch(console.log);

이것은 당신의 코드를 읽는 누구에게나 이것이 당신의 앱 진입 지점이라는 것을 꽤 명확하게 보여줍니다.

언급URL : https://stackoverflow.com/questions/49938266/how-to-return-values-from-async-functions-using-async-await-from-function