>source

https://www.promisejs.org/implementing에서 간단한 약속의 구현을보고 있습니다./

여기에서 대부분의 것들을 얻었지만 ...이 특정 예제가 왜 핸들러를 배열로 저장해야하는지 잘 모르겠습니다.

다음 코드로 상태가 보류 중일 때만 배열을 푸시하는 경우

function handle(handler) {
  if (state === PENDING) {
    handlers.push(handler);
  } else {
    if (state === FULFILLED &&
      typeof handler.onFulfilled === 'function') {
      handler.onFulfilled(value);
    }
    if (state === REJECTED &&
      typeof handler.onRejected === 'function') {
      handler.onRejected(value);
    }
  }
}

그러나 상태를 이행하고 변경하기 전에 =! PENDING 상태를 다음과 같이 즉시 변경하면

function fulfill(result) {
  state = FULFILLED;
  value = result;
  handlers.forEach(handle);
  handlers = null;
}
function reject(error) {
  state = REJECTED;
  value = error;
  handlers.forEach(handle);
  handlers = null;
}

완료된 것을 비동기 적으로 호출하더라도

this.done = function (onFulfilled, onRejected) {
  // ensure we are always asynchronous
  setTimeout(function () {
    handle({
      onFulfilled: onFulfilled,
      onRejected: onRejected
    });
  }, 0);
}

다른 프로세스를 처리하든 처리 할 때마다 항상 새로운 promise 객체를 관찰하기 때문에 처리기가 하나 이상의 요소를 갖는 방법을 알 수 없습니다.

즉 어떤 조건에서 동일한 약속에 여러 성공 및 실패 처리기를 저장해야합니까?

보지 못했습니다.

나를 이해하도록 도와주세요.

  • 답변 # 1

    약속 체인이 체인의 헤드 (첫 번째 약속)에 "추가 핸들러"를 추가하지 않는 것이 사실입니다.

    약속 체인의 경우 각 .then  또는 .catch  체인 아래로new약속을 반환하므로 Promise 체인을 사용하면 단일 "핸들러"만 있으면됩니다

    그러나 모든 약속에는 둘 이상의 "청취자"가있을 수 있습니다. 즉, .then 를 호출 할 수 있습니다.  여러 번 방법 ... .then 에 의해 반환 된 약속  그러나, 새로운 p  여전히 같은 약속입니다, 그래서 어떤 .then  호출하면 핸들러로 추가됩니다

    const p = new Promise((resolve, reject) => setTimeout(resolve, 2000, 'result'));
    // this .then is handlers[0] on p
    p.then(r => console.log(`promise resolved with [${r}]`));
    // this .then is handlers[1] on p
    p.then(r => console.log(`you can add more than one "listener" to a promise - the result here is [${r}]`));
    // here is a promise chain, this too only adds one handler to the Promise "p"
    p
    // this .then is handlers[2] on p
    .then(r => `a third handler [${r}]`) // this is added to handlers
    .then(console.log); // but this .then is NOT a handler on p, 
          //it's a handler on the promise returned by the previous `.then`
    
    

  • 이전 정확히 일치하는 MySQL 검색
  • 다음 react native - 하위 컴포넌트에서 상위 함수 호출이 작동하지 않습니다