2013-03-12 20 views
0

我試着打2個web服務並得到了他們的迴應。 Web服務應該被並行訪問,而不是Node.js異步執行。 childprocess.spawn也行爲異步。任何關於如何從同一個Node.js代碼中並行訪問這兩個Web服務的想法將非常有用。在nodejs中同步運行一個進程

+0

退房https://github.com/caolan/async#並行 – robertklep 2013-03-12 06:53:27

回答

0

像robertklep建議異步是去

並行Web的方式請求

/** 
* Fetches both goole and yahoo at the same time, but waits until both 
* are done before returning 
**/ 
var async = require('async') 
var request = require('request') 
var inspect = require('eyespect').inspector() 
doParallel(function (err) { 
    if (err) { 
    inspect(err, 'error running parallel tasks') 
    } 
    inspect('********************************************************************') 
    inspect('done with parallel tasks') 
}) 
function doParallel(callback) { 
    async.parallel([ 
    // fetch google.com 
    function (cb) { 
     var url = 'http://www.google.com' 
     request(url, function (err, res, body) { 
     if (err) { 
      return cb({ 
      message: 'error getting google.com', 
      url: url, 
      error: err 
      }) 
     } 
     inspect(res.statusCode, 'google response status code') 
     inspect(body, 'google response body') 
     cb() 
     }) 
    }, 

    function (cb) { 
     var url = 'http://www.yahoo.com' 
     request(url, function (err, res, body) { 
     if (err) { 
      return cb({ 
      message: 'error getting google.com', 
      url: url, 
      error: err 
      }) 
     } 
     inspect(res.statusCode, 'yahoo response status code') 
     inspect(body, 'yahoo response body') 
     cb() 
     }) 
    } 
    ], callback) 
} 

系列Web請求

var async = require('async') 
var request = require('request') 
var inspect = require('eyespect').inspector() 
doSeries(function (err) { 
    if (err) { 
    inspect(err, 'error running parallel tasks') 
    } 
    inspect('********************************************************************') 
    inspect('done with parallel tasks') 
}) 
/** 
* Fetch google first, wait for it to finish, and then fetch yahoo 
**/ 
function doSeries(callback) { 
    async.series([ 
    // fetch google.com 
    function (cb) { 
     var url = 'http://www.google.com' 
     request(url, function (err, res, body) { 
     if (err) { 
      return cb({ 
      message: 'error getting google.com', 
      url: url, 
      error: err 
      }) 
     } 
     inspect(res.statusCode, 'google response status code') 
     inspect(body, 'google response body') 
     cb() 
     }) 
    }, 

    function (cb) { 
     var url = 'http://www.yahoo.com' 
     request(url, function (err, res, body) { 
     if (err) { 
      return cb({ 
      message: 'error getting google.com', 
      url: url, 
      error: err 
      }) 
     } 
     inspect(res.statusCode, 'yahoo response status code') 
     inspect(body, 'yahoo response body') 
     cb() 
     }) 
    } 
    ], callback) 
} 
+0

由於諾亞將盡快嘗試更新 – 2013-03-14 10:45:08

相關問題