JavaScript 약속이 약속 이외의 것을 반환하게하려면 어떻게합니까?


36

모듈의 메소드 구현에 대한 클라이언트의 사양이 있습니다.

 // getGenres():
 //  Returns a promise. When it resolves, it returns an array.

장르의 배열이 주어진다면

['comedy', 'drama', 'action']

다음은 약속이있는 스켈레톤 방법입니다.

MovieLibrary.getGenres = function() {
  var promise = new Promise(function(resolve, reject) {
    /* missing implementation */
  });

  return promise;
};

장르에서 찾은 데이터를 반환하겠다고 약속 할 수 있습니까? 사양 설명을 얻는 더 좋은 방법이 있습니까?


8
약속은 값을 "반환"하지 않고 콜백 (.then ()으로 제공)으로 전달합니다. 사양은 나에게 혼란스럽게 들린다. 아마 당신은 resolve([genre1, genre2, ...]);promise 구현 내에서 해야한다고 말하고 싶을 것입니다.
Ixrec

답변:


37

약속이 어떻게 사용되는지 이해하지 못하는 것 같습니다. 약속을 돌려줍니다. 그런 다음 나중에 코드에서 약속을 해결하면 결과로이를 확인하고 해당 결과는 .then()약속에 연결된 처리기 로 전달됩니다 .

MovieLibrary.getGenres = function() {
  var promise = new Promise(function(resolve, reject) {
    /* missing implementation */
    resolve(result);
  });

  return promise;
};

MovieLibrary.getGenres().then(function(result) {
    // you can access the result from the promise here
});

5
이것은 약속이 내가 기대 한대로 작동한다는 것을 확인시켜줍니다.
sealocal

아마도 이것이 왜 필요한지 이해하지 못했을 것입니다. Redux with Realm이있는 React Native와 같은 환경에서 초기 상태를 Redux createStore에 넣어야합니다. Realm에서 가져와야하지만 promise를 반환합니다. 매우 빠르고 간단해야하므로 데이터를 반환 할 때까지 차단하고 싶습니다. 대신에 나는 createStore ()에 대한 영역 약속 평소 JSON 개체를 결합하는 방법에 문제가 얻을
likern

24

업데이트 된 버전을 사용하는 await것보다 .then().

await약속이 해결 될 때까지 실행을 중지합니다. 사용 .then()하는 것과 달리 await약속을 반환하는 다양한 작업을 수행하면서 값을 유지할 수 있으며 실행은 다음 줄로 계속 진행됩니다 ( '직접 스타일'이라고 함). 을 보는 것이 훨씬 좋습니다 .then(). 다른 곳 과 비교할 때 나머지 JavaScript와 일치하기 때문 입니다.

// Example function that returns a Promise that will resolve after 2 seconds
var getGenres = function() {
  return new Promise(function(resolve) {
    setTimeout(function(){
      resolve(['comedy', 'drama', 'action'])
    }, 2000);
  });
}

// We start an 'async' function to use the 'await' keyword
(async function(){
  var result = await getGenres()
  console.log('Woo done!', result)

  // But the best part is, we can just keep awaiting different stuff, without ugly .then()s
  var somethingElse = await getSomethingElse()
  var moreThings = await getMoreThings()
})()

Await는 모든 현재 브라우저 및 노드에서 지원됩니다.


1
이봐,이 주제에 대한 SE 질문 3 개와 마지막으로 우리는 실제 답변이 있습니다!
앤드류
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.