2017-12-04 23 views
0

나는이 같은 tslint 오류를 많이 얻을의 :잘못된 '기다리고'이 아닌 약속 값 (블루 버드 약속) 내 전체 프로젝트가 <code>tslint --project tsconfig.json src/**/*.ts</code>를 사용 tslint 때

Invalid 'await' of a non-Promise value.

이러한 오류는 모든 라인에서 팝업 어디 Bluebird 약속을 기다리고 있습니다. 나는이 경고를 피하기 위해 무엇을해야하는지 궁금합니다. 런타임에는 문제가 발생하지 않지만 이러한 문제를 해결할 충분한 이유가 있다고 가정합니다.

예를 들어 나는 모든 약속에 대해 Bluebird를 사용하는 amqplib 라이브러리를 사용하고 있습니다. 그리고 나는 내가 tslint 오류가 발생합니다 약속 기반의 방법 중 하나를 기다리고마다 :

const queueInfo: Replies.AssertQueue = await this.channel.assertQueue(this.jobQueueName); 

질문 :

블루 버드 약속처럼 비 - 약속 값을 대기하는 가장 좋은 방법은 무엇입니까?

+0

소리가 타이핑에 문제가 있습니다. ampqplib은 메서드가 반환하는 형식을 어떻게 정의합니까? – JLRishe

+0

''await Bluebird.resolve (3);에 대해 linting 할 때 같은 오류가 발생합니다. – kentor

답변

1

await 표현에 약속으로 치료하는 유형 나타내는 설정을 포함

https://palantir.github.io/tslint/rules/await-promise/

본인 스스로 시도하지 않았습니다. 블루 버드 (Bluebird) 약속을 기다리는 데이 기능을 사용할 수 있어야합니다.

"await-promise": [true, "Bluebird"] 
+0

오, 아주 좋은 곳입니다. tslint가 Bluebird와 숫자가 아닌 약속 (의견에 나와 있듯이)간에 다를 수 있다면 왜 microsoft-contrib 가이드 라인에서 허용하지 않겠습니까? – kentor

+0

@kentor 나는 tslint가 약속 [like object]와 비 약속을 구분할 수 있다고 말하지 않았다. 방금 Github의 스레드의 원래 의도는 전혀 약속하지 않은 것으로 보였다고 말했고, 내가 말했듯이 적어도 스레드의 최종 결론은 상황이 너무 힘들어서 어떤 어려운 규칙도 만들 수 없다는 것이 었습니다. 그것에 대해 (나는 현재의 규칙이 다른 곳에서 결정되었다고 생각한다). MS의 기여 가이드 라인과 관련하여, 그들이 기여하지 않은 약속을 허용하는 데 그다지 열심히 일하는 것은 아니므로 허용 할 수있는 방법을 벗어나지는 않을 것입니다. – JLRishe

1

then() 메서드를 사용하여 "thenable"개체를 PromisePromise.resolve을 사용하는 네이티브 형식으로 변환 할 수 있습니다.

const queueInfo: Replies.AssertQueue = await Promise.resolve(this.channel.assertQueue(this.jobQueueName)); 

의 대체 문법 (조금 때문에 폐쇄 덜 효율적) : 그것은 TSLint처럼 보이는

const queueInfo: Replies.AssertQueue = await Promise.resolve().then(() => 
    this.channel.assertQueue(this.jobQueueName) 
); 
+0

나는 'Promise.resolve (bluebirdPromsie)'가 또 다른 약속을 소개한다는 것에 약간 실망했다. 그러나 지금 당장 비 본국 약속을 기다리는 더 좋은 방법은 없을 것입니다. – kentor

+0

@kentor'bluebirdPromise '는 비 본래 약속을 기다리는 훌륭한 방법입니다. 뭔가가 있다면 그것은 약속이 아니라 문제인 귀하의 린터 (또는 TypeScirpt)입니다. – JLRishe

+0

@ JLRishe tslint 오류는 의도적으로 설계된 것입니다 (https://github.com/Microsoft/TypeScript/issues/8310 참조). – kentor