Here I would like to implement 'Promise' like blocks. But I'm not able to set the result for the blocks.
Here I have 2 Challenges :
- I'm trying to implement simple Promise example for getting a full string from the first name and last name.
- I would like to call 'then' multiple times.
- First I want to get the full name from both.
- Then convert into Uppercase.
- Then convert into lowercase. ..so on (mean to say multiple 'then' conditions with some task.)
How can I achieve multiple times?
Here is my example.
class Promise<T> {
private var resultHandler : ((_ result:T)->())?
private var errorHandler : ((_ error:String)->())?
private var final : (()->())?
func resolve(_ value: T) {
resultHandler?(value)
final?()
}
func reject(_ value: String) {
errorHandler?(value)
final?()
}
func then(_ block:@escaping (_ result:T)->()) {
resultHandler = block
}
func error(_ block:@escaping (_ result:String)->()) {
errorHandler = block
}
func finally(_ block:@escaping ()->()) {
final = block
}
}
func getFullName(firstname: String, lastname: String) -> Promise<String> {
let p = Promise<String>()
if firstname.count > 0 && lastname.count > 0 {
let name = firstname + " " + lastname
p.resolve(name)
}
else {
print("--")
p.reject("Firstname and Lastname can't be empty" )
}
return p
}
let p = getFullName(firstname: "Alen", lastname: "Stel")
p.then { (name) in
print("Name", name)
}