source

약속에서 돌아오다()

manycodes 2023. 2. 14. 21:33
반응형

약속에서 돌아오다()

다음과 같은 Javascript 코드를 가지고 있습니다.

function justTesting() {
  promise.then(function(output) {
    return output + 1;
  });
}

var test = justTesting();

var test에는 항상 정의되지 않은 값이 있습니다.아직 약속이 안 풀려서 그런 것 같아요.약속에서 값을 돌려줄 방법이 있을까요?

에서 물건을 반환할 때then()콜백, 좀 마술같아요값을 반환하면 다음 값은then()이 값으로 호출됩니다.하지만 만약 당신이 약속 같은 것을 돌려준다면, 그 다음,then()대기하고, 그 약속이 정착되었을 때만 호출됩니다(예약/예약).

출처: https://web.dev/promes/#queueing-asynchronous-actions

약속을 사용하려면 약속을 만드는 함수를 호출하거나 직접 만들어야 합니다.실제로 어떤 문제를 해결하려고 하는지 설명하지는 않지만, 다음과 같이 약속을 작성합니다.

function justTesting(input) {
    return new Promise(function(resolve, reject) {
        // some async operation here
        setTimeout(function() {
            // resolve the promise with some value
            resolve(input + 10);
        }, 500);
    });
}

justTesting(29).then(function(val) {
   // you access the value from the promise here
   log(val);
});

// display output in snippet
function log(x) {
    document.write(x);
}

또는 약속을 반환하는 함수가 이미 있는 경우 해당 함수를 사용하여 약속을 반환할 수 있습니다.

// function that returns a promise
function delay(t) {
  return new Promise(function(resolve) {
    setTimeout(function() {
      resolve();
    }, t);
  });
}

function justTesting(input) {
  return delay(100).then(function() {
    return input + 10;
  });
}

justTesting(29).then(function(val) {
  // you access the value from the promise here
  log(val);
});

// display output in snippet
function log(x) {
  document.write(x);
}

내가 여기서 한 일은 바로 그 약속에 대한 답신이다.테스트 기능그런 다음 함수가 해결되면 결과를 얻을 수 있습니다.

// new answer

function justTesting() {
  return new Promise((resolve, reject) => {
    if (true) {
      return resolve("testing");
    } else {
      return reject("promise failed");
   }
 });
}

justTesting()
  .then(res => {
     let test = res;
     // do something with the output :)
  })
  .catch(err => {
    console.log(err);
  });

이게 도움이 됐으면 좋겠네요!

// old answer

function justTesting() {
  return promise.then(function(output) {
    return output + 1;
  });
}

justTesting().then((res) => {
     var test = res;
    // do something with the output :)
    }

약속의 혼동을 없애기 위해 "wait" 명령과 비동기 기능을 사용하는 것을 선호합니다.

이 경우 먼저 비동기 함수를 작성합니다.이 함수는 "약속" 아래에 있는 어나니머스 함수 대신 사용됩니다.다음 질문의 일부:

async function SubFunction(output){

   // Call to database , returns a promise, like an Ajax call etc :

   const response = await axios.get( GetApiHost() + '/api/some_endpoint')

   // Return :
   return response;

}

그리고 이 함수를 메인 함수에서 호출합니다.

async function justTesting() {
   const lv_result = await SubFunction(output);

   return lv_result + 1;
}

여기서 메인 함수와 서브 함수를 모두 비동기 함수로 되돌린 것에 주목해 주세요.

Promises값은 반환하지 않고 콜백(.then()과 함께 제공)으로 전달됩니다.

그건 아마 당신이 해야 할 일이라는 것을 말하려고 하는 것일 거예요.resolve(someObject);약속 이행의 내부입니다.

그럼 네 안에then참조할 수 있는 코드someObject하고 싶은 걸 할 수 있어요

원래 포스터가 원하는 것은 다른 약속을 돌려주지 않고 약속에서 포장되지 않은 값을 돌려주는 것이라고 생각합니다.달리 증명되지 않는 한, 유감스럽지만 이건 다른 방법으로는 불가능할 수 없습니다then()또는 비동기/비동기 컨텍스트.당신은 무슨 일이 있어도 항상 약속을 받아요.

배열이나 개체와 같은 참조 데이터 유형을 사용해야 합니다.

function foo(u,n){
  let result = [];
  const userBrands = new Promise((res, rej)=> {
                        res(['brand 1', 'brand 3']);
                      })
  
  userBrands.then((ub)=>{
    return new Promise((res, rej) =>{
      res([...ub, 'brand 4', 'brand 5']);
    })
  }).then(response => {
    return result.push(...response);
  });
  return result;
};
foo();

약속을 해결한 후에는 값을 반환할 수 없습니다.대신 약속이 해결되면 다른 함수를 호출합니다.

function justTesting() {
    promise.then(function(output) {
        // instead of return call another function
        afterResolve(output + 1);
    });
}

function afterResolve(result) {
    // do something with result
}

var test = justTesting();

언급URL : https://stackoverflow.com/questions/34094806/return-from-a-promise-then

반응형