我发现在一个看似简单的情况下使用 PromiseKit 6.13.1 非常困难。我有以下两个返回 a 的函数,Promise<String>但我似乎无法找到一种使用 ```firstly{}.then{} 语法来使用它们的方法:
func promiseGetJWTToken() -> Promise<String> {
return Promise<String> { seal in
let error: Error = NSError(domain: "", code: 2000)
getJWTToken { tokenJWT in
guard let tokenJWT = tokenJWT else {
seal.resolve(.rejected(error))
return
}
seal.resolve(.fulfilled(tokenJWT))
}
}
}
func promiseGetBEToken() -> Promise<String> {
return Promise<String> { seal in
let error: Error = NSError(domain: "", code: 2000)
getBEToken { result in
switch result {
case .success(let response):
guard let tokenBE = response.token else …Run Code Online (Sandbox Code Playgroud) 我认为迄今为止我采取的一项原则是:
Promise 是一个 thenable 对象,因此它接受消息
then,或者换句话说,某些代码可以使用then履行处理程序调用该对象上的方法,该对象是接口的一部分,这是“下一步要采取的步骤” ,以及拒绝处理程序,这是“如果没有成功则采取的下一步”。通常最好在履行处理程序中返回一个新的 Promise,以便其他代码可以在其上“链接”,也就是说,“我还将告诉您下一步的操作,以及如果失败则下一步的操作,所以当你完成后给他们中的一个打电话。”
然而,在JavaScript.info Promise 博客页面上,它说履行处理程序可以返回任何“thenable”对象(这意味着类似 Promise 的对象),但这个 thenable 对象的接口是
.then(resolve, reject)
Run Code Online (Sandbox Code Playgroud)
这与通常的代码不同,因为如果履行处理程序返回一个新的 Promise,则该 thenable 对象具有接口
.then(fulfillmentHandler, rejectionHandler)
Run Code Online (Sandbox Code Playgroud)
所以该页面上的代码实际上得到了 aresolve并调用resolve(someValue)。如果fulfillmentHandler不只是 的另一个名称resolve,那么为什么 thenable 会有所不同?
该页面上的可用代码:
.then(resolve, reject)
Run Code Online (Sandbox Code Playgroud)