请求返回看起来像流的东西



有一个轮询SOAP端点的函数

someFunction = (task={}, callback)->
    req = {}
    req.body = buildEnvelope(task) # this works correctly
    result = {}
    request.post(
        {url: <<wsdl string>>, body: req.body, headers: {"Content-Type": "text/xml"}},
        (error, response, body) ->
            if not error and response.statusCode is 200
                result = buildHash(body) # this builds a hash from the result, correctly
                return result
    )

所有内部函数都按预期工作,但是当我尝试做console.log(someFunction(hash, ()->)之类的事情时,我得到奇怪的内容:

{ domain: null,
  _events: { error: [Function], complete: [Function], pipe: [Function] },
  _maxListeners: 10,
  readable: true,
  writable: true,
  body: <Buffer 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 22 55 54 46 2d 38 22 3f 3e 20 3c 53 4f 41 50 2d 45 4e 56 3a 45 6e ...>,
  headers:
   { 'Content-Type': 'text/xml',...}

看起来像是从request返回的某种味道的流对象。我猜这是因为我把return语句放在request.post()调用的中间,但是如果我把它放在那个调用之外,它返回一个空哈希,因为返回发生在POST操作发生之前。

获得我期望的哈希值的最佳方法是什么,因为运行someFunction()将由函数返回?

返回值是request.post返回的值。如果CoffeeScript函数没有显式的return语句,那么它返回最后执行语句的值;在您的情况下,这将是request.post调用。

可能没有人关心你的request.post回调返回什么,所以你的:

return result

是毫无意义的。如果你想从异步调用中获得一些东西,然后你需要使用callback参数:

someFunction = (task={}, callback)->
    #...
    request.post(
        {url: <<wsdl string>>, body: req.body, headers: {"Content-Type": "text/xml"}},
        (error, response, body) ->
            if not error and response.statusCode is 200
                callback(buildHash(body)) # <------------------
    )
someFunction({...}, (hash) ->
    # Do something interesting with `hash` in here...
)

callback的真正调用约定当然取决于您需要返回的具体内容。

相关内容

  • 没有找到相关文章

最新更新