0

Node.js と Actionhero がどのように機能するかについて、非常に重要なことが明らかに欠けています。

誰かが次の問題が発生する理由を説明してもらえますか:

私はこの単純なコードを持っています: 基本的には .css ファイルを読み取ります。

buildAdsHTML: function (ads, type) {
        var cssDir = path.normalize(__dirname + '/../public/css/');
        switch (type) {
            case  'text':
                var result = '';
                console.log("STEP 1");
                fs.readFile(cssDir + type + 'Ads.css', {encoding: 'utf8'}, function (err, data) {

                    console.log(err);
                    console.log(data);
                    if (!err) {

                        console.log("STEP 2");
                        result += '<style>' + data + '</style>';

                    } else {

                    }
                });

                break;

        }
        console.log('STEP 3');
        return result;
    }

このコードを実行すると、結果として空の文字列が得られます。コンソール出力は次のとおりです。

STEP 1 <- so far so good 
STEP 3<- this should be last!

null <- this is the error variable 

.some-random-css-class{
    display: block;
    width: 100;
    min-height: 250px;
}

STEP 2

ある時点で、それfs.reafFileが非同期関数であることがわかりました。ということで、当然同期版に変更fs.readFileSync。コンソール出力はさらに悪化します。

STEP 1
STEP 3

それでおしまい!他には何もありません。結果として空の文字列が得られます。コード全体がswich.

actionhero プロジェクトのすべての関数とメソッドでこの動作に気付きました。特にnext(connection). メソッドの最後で呼び出すことはできません。

For everyifまたはswich I は、結果を実際に制御するために内部で呼び出す必要があります。

そうしないと、接続に追加したすべての新しいデータが失われます。

それは何ですか?コーディング中にばかげた間違いをしないように、その機能を詳細に説明してください。

4

2 に答える 2