我在Swift中使用PromiseKit 3.0,我有一系列承诺<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ex.errorhandle"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name="com.ex.errorhandle.MyApp"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name="com.ex.errorhandle.ServiceClass" />
</application>
</manifest>
。我想把所有成功的承诺收集到一个单一的承诺中。 [Promise<Int>]
。
即使一个包含承诺拒绝,Promise<[Int]>
和when
都会拒绝。根据文档,我应该能够使用join
并且错误将包含已完成值的数组,但在Swift中,错误包含传递的所有承诺,而不是履行的值。
任何帮助将不胜感激。
答案 0 :(得分:1)
我现在看到我需要一个新功能:
https://gist.github.com/dtartaglia/2b19e59beaf480535596
/**
Waits on all provided promises.
`any` waits on all provided promises, it rejects only if all of the promises rejected, otherwise it fulfills with values from the fulfilled promises.
- Returns: A new promise that resolves once all the provided promises resolve.
*/
public func any<T>(promises: [Promise<T>]) -> Promise<[T]> {
guard !promises.isEmpty else { return Promise<[T]>([]) }
return Promise<[T]> { fulfill, reject in
var values = [T]()
var countdown = promises.count
for promise in promises {
promise.then { value in
values.append(value)
}
.always {
--countdown
if countdown == 0 {
if values.isEmpty {
reject(AnyError.Any)
}
else {
fulfill(values)
}
}
}
}
}
}
public enum AnyError: ErrorType {
case Any
}