gpt4 book ai didi

typescript - 在 Protractor 中使用原生 promise

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:49 24 4
gpt4 key购买 nike

有没有办法使用 protractor filter,它接受一个返回 protractor 自己的 Promise 类型的函数,以及我自己的返回原生 Promise 的函数?

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

这会引发 TypeScript 编译错误

TS2345:Argument of type '(e: ElementFinder) => >Promise' is not assignable to parameter of type '(element: >ElementFinder, index?: number) => boolean | Promise'. Type 'Promise' is not assignable to type 'boolean | Promise'. Type 'Promise' is not assignable to type 'promise.Promise'. Property 'cancel' is missing in type 'Promise'.

顺便说一句,由于弃用(https://github.com/SeleniumHQ/selenium/issues/2969),我无法自己创建 Protractor 的 Promise

最佳答案

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

这些助手打开了 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))

关于typescript - 在 Protractor 中使用原生 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45347680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com