이 약속 체인이 있습니다.체인에 .catch가 있지만 노드 6을 사용하여 UnhandledPromiseRejectionWarning이 발생했습니다.
com.openPort(port).then(port => {
_.pTimeout(3000, com.sendPort(port, NCD.gen(args.cmd)))
.then(received => {
console.log('complete response: ', NCD.parse(received));
Debug.L1('resolved num data listeners: ', port.listenerCount("data"));
})
})
.catch(function(e) {
console.log('error: ', e)
});
와 나는 sendPort 약속이 해결되지 않은이 될 것 가짜 명령을 전송하여 제한 시간 약속을 테스트하고 있습니다. 타임 아웃 약속은 경주에서 승리를 거두지 만, 경고는 .catch가 거부를 처리하기 전에옵니다. 여기
는이기는하지만 ... 콘솔(node:9616) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2):
Timed out
당신이이 처리되었습니다 있도록 콘솔에 "시간이 초과되었습니다"는 .catch 퍼팅 경고 후 볼 수 있습니다 보여줍니다
pTimeout: function(timeout, promise) {
return Promise.race([
promise,
new Promise(function(resolve, reject) {
setTimeout(function() {
reject('\nTimed out');
}, timeout);
})
]);
}
제한 시간 약속 경주입니다 부적절하게 ??
다른 게시물에서 보이는 노드 6을 사용 중이며, 첫 번째 틱에서 처리되지 않으면 경고 메시지를 표시합니다. 나는 그것들을 어떻게 고칠 수 있을지 상상할 수 없다. 어떻게 처리해야합니까? 나는 타임 아웃 약속 후에 .catch를 넣으려고했지만 여전히 .catch 전에 경고를 받는다.
예. 아직도 내가 고아가 된 이유를 이해한다면, 나는 이것을 다시 피할 것이다. 그것은 첫 번째 약속 결의안의 "내부"에 있기 때문입니까? 그것이 내가 약속을 중첩 할 때 그들은 모두 돌아가 선발되어야한다. 그렇지 않으면 그들 (그리고 그들 안의 어떤 것)이 고아가 될 것인가? – DKebler
@DKebler - 예. 약속에는 마술이 없습니다. 그들은'.then()'핸들러에 무엇이 있는지에 대해 아무것도 모른다. 그래서, 거기에 또 다른 약속이 있다면 부모 약속에 연결하는 유일한 방법은'.then()'핸들러에서 그것을 반환하는 것입니다. 부모 약속이 해결되기 전에 부모 약속이 해결 될 때까지 기다려야합니다. '.then() '핸들러에서 아무것도 반환하지 않으면, 부모 약속은 자식 약속을 전혀 알지 못하며 자식 약속은 스스로 남겨 둡니다. – jfriend00
나는 그것을 지금 얻는다! 그들은 그 최고치까지 버블 링 할 방법이 필요합니다. 이것은 또한 이처럼 단지 하나의 둥지에 대한 과잉 공격 일 가능성이있는 체인을 평평하게하는 아주 좋은 기사를 더 잘 이해하는 데 도움이되지만 약속을 되 돌리는 것은 어떤 가치를 되돌려주는 것과는 다릅니다. Thx https://github.com/ThomasBurleson/angularjs-FlightDashboard – DKebler