【问题标题】:Use native promise in protractor在量角器中使用原生承诺
【发布时间】:2017-07-27 10:09:28
【问题描述】:

有没有办法使用量角器filter,它接受一个返回量角器自己的 Promise 类型的函数,以及我自己的返回本机 Promise 的函数?

const myFilter = async(e: ElementFinder): Promise<boolean> => {
...
}
myElements.filter(myFilter)

这会引发 TypeScript 编译错误

TS2345:'(e: ElementFinder) => >Promise' 类型的参数不可分配给'(element: >ElementFinder, index?: number) => boolean | 类型的参数承诺'。 类型“Promise”不可分配给类型“boolean |承诺'。 类型“Promise”不可分配给类型“promise.Promise”。 “Promise”类型中缺少属性“cancel”。

顺便说一句,我不能自己创建量角器的承诺,因为弃用 (https://github.com/SeleniumHQ/selenium/issues/2969)

【问题讨论】:

    标签: typescript protractor


    【解决方案1】:

    好的,如果这仍然相关,我必须再次进行测试,这一次我立即找到了解决方案。

    这些助手打开了protractor.promise.Promise 和本机Promise 之间的桥梁。

    const toNativePromise = <T = void>(p: protractor.promise.Promise<T>): Promise<T> => { 
        return new Promise((res, rej) => {
            p.then(res).catch(rej)
        })
    }
    
    const toProtractorPromise = <T = void>(native_promise: Promise<T>): protractor.promise.Promise<T> => {
        const deferred = protractor.promise.defer<T>();
        const protractorPromise = deferred.promise;
        native_promise.then(deferred.fulfill).catch(deferred.reject)
        return protractorPromise
    }
    
    

    无论如何,为了解决你最初的问题,你可以这样写:

    const myFilter = async(e: ElementFinder): Promise<boolean> => { ... }
    const myFilterForProtractor = (e) => toProtractorPromise(myFilter(e))
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      相关资源
      最近更新 更多