2016-07-13 3 views
1

BrightFutures를 사용하여 SwiftExpress에서 기본 비동기 예제를 만들고 실패하고 있습니다. 여기에 내가있어 무엇 :Bright Futures를 사용하는 신속한 Express에서 비동기 작업을 처리하는 방법?

class FileSystem { 
    class func read(fileURL:NSURL, convert:(NSData?) -> Action<AnyContent>) -> Future<Action<AnyContent>, AnyError> { 
     let promise = Promise<Action<AnyContent>, AnyError>() 

     Queue.global.async { 
      let fileData = NSData(contentsOfURL:fileURL) 
      let action = convert(fileData) 
      promise.success(action) 
     } 

     return promise.future 
    } 
} 

다음은 서버의 :

import Express 
import TidyJSON 
import BrightFutures 
import Result 

let app = express() 

app.views.register(JsonView()) 

// Parameters: JSON object {"filePath" : "<filePath>"} 
app.post("/readFile") { request -> Future<Action<AnyContent>, AnyError> in 
    //check if JSON has arrived 
    guard let json = request.body?.asJSON(), 
     let jsonDict = json.object, 
     let filePath = jsonDict["filePath"], 
     let filePathString = filePath.string else { 
     return future { 
      var response = [ 
       "status": "error", 
       "message" : "Invalid request" 
      ] 
      return Result(value: Action.render(JsonView.name, context: response)) 
     } 
    } 

    print("json: \(json)") 
    print("json: \(json.object)") 

    let url = NSURL(fileURLWithPath: filePathString) 

    return FileSystem.read(url, convert: { data -> Action<AnyContent> in 
     var response = [String:AnyObject]() 
     var status:String 

     if data == nil { 
      status = "error" 
      response["message"] = "Could not read file" 
     } 
     else { 
      status = "ok" 
      response["result"] = data! 
     } 

     response["status"] = status 

     return Action.render(JsonView.name, context: response) 
    }).onSuccess { action in 
     print("action: \(action)") 
    } 
} 

app.all("/*") { request in 
    return Action.ok("Got a unknown request.") 
} 

app.listen(9999).onSuccess { server in 
    print("Express was successfully launched on port", server.port) 
} 

app.run() 

나는이 사용하는 우편 배달에 연결할 때, 나는 얻을`{} '응답한다. 중단 점을 설정할 수 있으며 코드가 실행 중임을 알 수 있으며 오류가 있음을 알 수 있습니다 (파일을 찾을 수 없습니다 - 내 의도적으로). 응답에 오류가없는 이유를 알 수 없습니다. 상태 및 메시지. 아이디어?

답변

2

문제가 해결되었습니다. 하나의 라인은 틀렸다 : 필요

var response = [String:AnyObject]() 

가 될 :

var response = [String:String]() 
관련 문제