需要一些关于收益率的帮助(和承诺?)

时间:2016-08-12 14:34:58

标签: javascript node.js

对于客户端Node.js应用程序,我应该“等待”完成http.request,例如,

console.log('Before http request')
responseData = x.exec(parms)
console.log('Process data')

Module x:
exports.exec = function exec (params) {
  x = https.request(xxxx, function() {
    x.on('data' ...
    x.on('end'...
      return (returnData)
  }  
}

如果可能,应该在不使用任何co()或其他外部模块的情况下完成。我已经阅读了各种各样的手册,听了一堆教程并尝试了各种各样的“yield”和函数*组合,但我只是不明白:(

有谁愿意帮助新手?

2 个答案:

答案 0 :(得分:1)

您不能在异步函数中使用“return”指令。而不是做“return(returnData)”,而是进行回调“回调(状态,代码,返回数据)”或简单地“回调(returnData)”。

console.log('Before http request')
responseData = null; //Just declaration
x.exec(params, function(status, data) {
    responseData = data;//You can check status to see if all happened fine
}
console.log('Process data')

Module x:
exports.exec = function exec (params, callback) {
    x = https.request(xxxx, function() {
        x.on('data' ...
        x.on('end'...
          callback(1, returnData); // you can made an x.on('error'... method where statuse can be 0
        }  
    }
}

答案 1 :(得分:0)

您使用生成器“产生”一个承诺,以便生成器将停止运行,直到该承诺被解决或拒绝。以下是使用generator + promise进行异步操作的示例:jsfiddle

io.on('connection', ...)