을 약속 내 상황입니다 : 각각의 setTimeout 콜백 패턴을 사용하여 다른 비동기 작업입니다비동기 기능은 내부 여기
fetchData(foo).then(result => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result + bar);
}, 0)
});
}).then(result => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result + woo);
}, 0)
});
}).then(result => {
setTimeout(() => {
doSomething(result);
}, 0)
});
.
fetchData(foo).then(result => {
setTimeout(() => {
return result + bar;
}, 0)
}).then(result => {
setTimeout(() => {
return result + woo;
}, 0)
}).then(result => {
setTimeout(() => {
doSomething(result);
}, 0)
});
은 분명히이 작동하지 않습니다 코드가 더 같이해야 같은
약속 내부의 각 기능을 래핑하는 정말 고통 스럽다이다, 나는 생각합니다.
약속 사용 중입니까? 약속에있는 모든 기존 비동기 함수를 정말로 래핑해야합니까?
편집 :
이 사실 나는 내 예제에서의 setTimeout이 비동기 작업 도중 reprensent하기위한 것입니다 것을 분명히하지 않았다, 내 예를 들어 내 상황을 완전히 reprensentative 아니었다 알고 있습니다. 이 상황이 내 상황을 더 잘 나타내줍니다.fetchData(foo).then(result => {
return new Promise((resolve, reject) => {
asyncOperation(result, operationResult => {
resolve(operationResult);
}, 0)
});
}).then(result => {
return new Promise((resolve, reject) => {
otherAsyncOperation(result, otherAsyncResult => {
resolve(otherAsyncResult);
}, 0)
});
}).then(result => {
doSomething(result);
});
약속을 사용하지 않으려면 맞춤 이벤트를 사용할 수 있습니다. 이 이벤트는 변경 사항을 감지 할 때마다 트리거됩니다! (https://www.sitepoint.com/javascript-custom-events/).하지만 왜 당신은 약속을 사용하는 것을 좋아하지 않습니까? –
기존 콜백 기반 비동기 기능을 약속하는 데 도움이되는 ['pify'] (https://github.com/sindresorhus/pify)와 같은 모듈이 있습니다. 또한 합리적인 수의 패키지가 비동기 함수에 대한 약속과 콜백 지원을 제공합니다 (콜백 함수를 전달하지 않으면 약속을 반환합니다). 그러나 이것이 당신의 상황에 적용되는지는 말할 수 없습니다. – robertklep
^^ 예 또는 'bluebird'는 매우 단순하며 기본 약속처럼 작동하지만 노드 스타일 콜백에 더 친숙합니다. [link] (http://bluebirdjs.com/docs/api/promise.fromcallback.html) – user3821538