2017-10-07 12 views
3

순수한 자바 스크립트 대신 TypeScript를 사용하고자하는 새로운 프로젝트를 시작했습니다. Bluebird를 타사 라이브러리와 함께 사용하는 데 어려움을 겪고 있습니다.Bluebird와 es6는 타이프 스크립트로 약속합니다

는 다음의 예를 참조하십시오

import * as Promise from 'bluebird' 

    private requestPlayerProfile(playerTag:string):Promise<IPlayerProfile> { 
    const requestOptions = Object.create(this.options)  
    return this.limiter.schedule(request, requestOptions) 
    } 

문제 : limiter 제 3 자 라이브러리의 인스턴스이며, 내가 나머지 블루 버드 약속을 사용하고있는 동안 limiter.schedule는 분명히 네이티브 약속을 반환 내 신청서의 그러한 사건을 어떻게 적절하게 처리 할 수 ​​있습니까?

[ts] 유형 '약속'을 '블루 버드'유형에 지정할 수 없습니다. 속성 'then'의 유형은 호환되지 않습니다. 입니다.

+1

사용중인 라이브러리의 약속 유형에 따라 다릅니다. 바닐라 약속을 반환하면 하나에서 다른 것으로 수동으로 매핑하거나 단순히 bluebirds 대신 기본 약속을 사용할 수 있습니다. –

+0

바닐라 약속이란 무엇입니까? 내 생각에 ES6의 기본 약속을 반환한다고 생각하며, 본래의 약속을 사용하면 말 그대로 어디에서나 기본 약속을 사용해야합니까? 따라서 requestPlayerProfile 함수를 호출하는 모든 경로/함수는 Bluebird에서도 작동해야합니다. 네이티브와 블루 버드 약속을 항상 혼합해야한다면 블루 버드 사용을 정말로 확신하지 않습니까? – kentor

답변

3

@Filipe가 오류 메시지를 올바르게 해석하고 있습니다. this.limiter.schedule(...)에 의해 반환 된 객체의 유형 무엇이든간에

  • 는, 그 유형은 bluebird.Promise<IPlayerProfile>와 호환되지 않습니다.
  • limiter.schedule(...)은 "바닐라"즉 네이티브 Promise<IPlayerProfile> 개체를 반환한다고 신뢰할 수 있다고 가정 할 수 없습니다. schedule(...)이 정의 된 소스 코드로 이동하면 쉽게 알 수 있습니다. Visual Studio 코드에서 F12을 사용합니다. 거기에있는 객체의 정확한 반환 유형을 확인하십시오. 정확히 반환되는 내용에 따라
  • , 당신은 두 가지 옵션이 있습니다
    1. 사용하는 대신 모두 bluebird의 약속에 의존 코드 어디에서나 입력 약속; 또는
    2. Convert that promise type to a bluebird one. 나는 나 자신을 시도하지는 않았지만 다음과 같이 작동해야합니다 : return Promise.resolve(this.limiter.schedule(request, requestOptions)) (http://bluebirdjs.com/docs/api/promise.resolve.html 참조).

는 나는 그것이 도움이되기를 바랍니다.