1

nodejsで同期性を強制する方法を理解しようとしてきましたが、ほとんどの試みで失敗しました。

たとえば、このコード:

var r = require('request');
var a = require('async');

var hello = function (cb) {
  console.log('Hello from 1!');
  cb();
}

var random = function (cb) {
  console.log(Math.floor(Math.random() * 10));
  cb();
}

var google = function (cb) {
  r('http://google.com', function (err, res, body) {
    console.log(res.statusCode);
  });
  cb();
}

var bye = function (cb) {
  console.log('Bye from 3!');
  cb();
}

a.series([hello, google, random, bye], function () {
  console.log('done');
});

これは期待どおりに機能しません。私のすべての試行で、Google からの応答コードは常に最後に来ます。

Hello from 1!
7
Bye from 3!
done
200

モジュールを使用するかどうかに関係なく、これらの関数を 1 つずつ順番に実行するにはどうすればよいですか?

4

1 に答える 1

2

Google リクエスト コードでは、応答を待たずにコールバックを呼び出しているためです。それを行う正しい方法は次のとおりです。

var google = function (cb) {
  r('http://google.com', function (err, res, body) {
    console.log(res.statusCode);
    cb();
  });
}

したがって、Google の応答のみが到着した場合、実行は次の関数に進みます。

于 2012-05-17T20:37:05.407 に答える