Promiseで「再試行」をコーディングするにはどうすればよいですか?

ジェローム

私は自分の問題をできる限り説明しようと思います。(1)APIを介してすべてのGrafanaデータソースを取得する(2)2つのJSONを作成する(3)それらをGrafanaAPIに投稿するメソッドがあります。

コードが3番目のステップを実行するときに、JSONの1つが終了しないことがあるため、エラーが発生し、結果が希望どおりにならないことがあります。

updateDashboard = Meteor.bindEnvironment(function() {
    console.log("called updateDashboard()");
    new Promise(Meteor.bindEnvironment(function(resolve) {
        // get all the datasources of Grafana
        HTTP.call("GET", 'http://localhost:3000/api/datasources', {
                headers: {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json',
                    'Authorization': APIKEY,
                },
            },
            function(error, result) {
                if (!error) {
                    allDataSources = result.data;
                    resolve(allDataSources);
                } else {
                    console.error(error);
                }
            });

    })).then(function(allDataSources) {
        // create the dashboard
        return new Promise(function(resolve) {
        //ANCHOR 
            var dataJSON = {
                //create the dashboard
                "annotations": {
                    "list": []
                },
                "description": "Containers metrics",
                "editable": true,
                "gnetId": null,
                "graphTooltip": 1,
                "hideControls": false,
                "id": null,
                "links": [],
                "refresh": "1s",
                //create the lines
                "rows": _.map(allDataSources, function(ds, index) {
                    return newGraphOverview(ds, index);
                }),
                //dashboard things
                "schemaVersion": 14,
                "style": "dark",
                "tags": [
                    "docker"
                ],
                "time": {
                    "from": "now-15m",
                    "to": "now"
                },
                "timepicker": {
                    "refresh_intervals": [
                        "1s",
                        "5s",
                        "10s",
                        "30s",
                        "1m",
                        "5m",
                        "15m",
                        "30m",
                        "1h",
                        "2h",
                        "1d"
                    ],
                    "time_options": [
                        "5m",
                        "15m",
                        "1h",
                        "6h",
                        "12h",
                        "24h",
                        "2d",
                        "7d",
                        "30d"
                    ]
                },
                "timezone": "browser",
                "title": "Docker Containers _custom_from_js",
                "version": 1
            }

            dataJSONDetails = newGraphDetails(allDataSources);

            resolve(dataJSON);

        });

    }).then(Meteor.bindEnvironment(function(dataJSON) {
        // send the dashboard
        HTTP.call("POST", "http://localhost:3000/api/dashboards/db", {
                headers: {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json',
                    'Authorization': APIKEY,
                },
                data: {
                    dashboard: dataJSON,
                    overwrite: true
                }
            },
            function(error, result) {
                if (!error) {
                    console.log("result post " + dataJSON.title + " ----------------------------------")
                    console.log(result);
                } else {
                   //HERE I WANT TO DO IF ERROR GO TO ANCHOR
                    console.log("error post " + dataJSON.title + "  ----------------------------------")
                    console.error(error);
                }
            });

        //send the dashboard for details view
        HTTP.call("POST", "http://localhost:3000/api/dashboards/db", {
                headers: {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json',
                    'Authorization': APIKEY,
                },
                data: {
                    dashboard: dataJSONDetails,
                    overwrite: true
                }
            },
            function(error, result) {
                if (!error) {
                    console.log("result post " + dataJSONDetails.title + " ----------------------------------")
                    console.log(result);
                } else {
                //HERE I WANT TO DO IF ERROR GO TO ANCHOR
                    console.log("error post " + dataJSONDetails.title + " ----------------------------------")
                    console.error(error);
                }
            });

    }));
});

切り取られたコードが機能しないことは知っていますが、読みやすくする方が簡単でした。

だから誰かが私が「エラーがもう一度作成しようとした場合」のようなものを作るのを手伝ってくれるでしょうか?Meteorの再試行を見たことがありますが、必要なものではないと思います

DoctorPangloss

promiseやコールバックは使用しないでください。Meteorの例で見たように、通常の同期的に見えるコードを記述します。

var datasources = null;
try {
    var request1 = HTTP.call("GET", 'http://localhost:3000/api/datasources', {
                headers: {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json',
                    'Authorization': APIKEY,
                }
            });
    // From http://docs.meteor.com/api/http.html#HTTP-call
    datasources = request.data;
} catch (e) {
    console.error(e);
    return;
}
// Do all the other steps you keep wanting to do...

他のHTTP呼び出しについても同様のステートメントを繰り返します。通常、localhost到達不能でない限りエラーをスローすることはありません。到達不能の場合、すべてが到達不能になります。したがって、try-catchを気にしないでください。例外がスローされ、クライアント(メソッドの呼び出し元)によって処理されるようにします。

通常、を使用する必要はありませんMeteor.bindEnvironment

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

文字変数を再コーディングするにはどうすればよいですか?

分類Dev

Phalcon v2 PhalconCrypt phpをv3で動作するように再コーディングするにはどうすればよいですか?

分類Dev

機能を再試行するにはどうすればよいですか?

分類Dev

中止されたSpannerコミットを再試行するにはどうすればよいですか?

分類Dev

すべての要因で答えがない複数の列を再コーディングするにはどうすればよいですか?

分類Dev

準引用を使用してプログラムで変数を再コーディングするにはどうすればよいですか?

分類Dev

dplyrを使用して、値のリストにないすべての値を再コーディングするにはどうすればよいですか?

分類Dev

abcdeでAIFFエンコーディングを使用するにはどうすればよいですか?

分類Dev

最大値に応じてデータフレーム列を再コーディングするにはどうすればよいですか?

分類Dev

Java:inputStreamからエンコーディングを取得するにはどうすればよいですか?

分類Dev

定期的に呼び出すサービスへの再帰呼び出しをコーディングするにはどうすればよいですか?

分類Dev

Swfit 4.0でKey-Valueコーディングを使用するにはどうすればよいですか?

分類Dev

Raku / Perl6:NativeCallでNULLをコーディングするにはどうすればよいですか

分類Dev

プッシュ通知を内部でコーディングするにはどうすればよいですか

分類Dev

AndroidでジオコーディングAPI(JSON)を使用するにはどうすればよいですか?

分類Dev

ディレクトリ内のすべてのコード行を再帰的にカウントするにはどうすればよいですか?

分類Dev

エラー時に内部監視のみを再試行するにはどうすればよいですか?

分類Dev

コーディングの問題、これを修正するにはどうすればよいですか?

分類Dev

PhantomJS内部エンコーディングを設定するにはどうすればよいですか?

分類Dev

並列コーディングにforeach関数を使用するにはどうすればよいですか?

分類Dev

このPHPコーディングにRelNo Followを追加するにはどうすればよいですか?

分類Dev

このPHPコーディングにRelNo Followを追加するにはどうすればよいですか?

分類Dev

Swift 3でAVCaptureSessionの再コーディングを開始するにはどうすればよいですか?

分類Dev

値のハードコーディングを回避するにはどうすればよいですか?

分類Dev

このコーディングをGoogleChromeで機能させるにはどうすればよいですか?

分類Dev

再コーディングせずにクラスを変更するにはどうすればよいですか?

分類Dev

コード内の要素のパディングを作成するにはどうすればよいですか?

分類Dev

これをハードコーディングしないようにするにはどうすればよいですか?デコレータで

分類Dev

Selectステートメントで行をハードコーディングするにはどうすればよいですか?

Related 関連記事

  1. 1

    文字変数を再コーディングするにはどうすればよいですか?

  2. 2

    Phalcon v2 PhalconCrypt phpをv3で動作するように再コーディングするにはどうすればよいですか?

  3. 3

    機能を再試行するにはどうすればよいですか?

  4. 4

    中止されたSpannerコミットを再試行するにはどうすればよいですか?

  5. 5

    すべての要因で答えがない複数の列を再コーディングするにはどうすればよいですか?

  6. 6

    準引用を使用してプログラムで変数を再コーディングするにはどうすればよいですか?

  7. 7

    dplyrを使用して、値のリストにないすべての値を再コーディングするにはどうすればよいですか?

  8. 8

    abcdeでAIFFエンコーディングを使用するにはどうすればよいですか?

  9. 9

    最大値に応じてデータフレーム列を再コーディングするにはどうすればよいですか?

  10. 10

    Java:inputStreamからエンコーディングを取得するにはどうすればよいですか?

  11. 11

    定期的に呼び出すサービスへの再帰呼び出しをコーディングするにはどうすればよいですか?

  12. 12

    Swfit 4.0でKey-Valueコーディングを使用するにはどうすればよいですか?

  13. 13

    Raku / Perl6:NativeCallでNULLをコーディングするにはどうすればよいですか

  14. 14

    プッシュ通知を内部でコーディングするにはどうすればよいですか

  15. 15

    AndroidでジオコーディングAPI(JSON)を使用するにはどうすればよいですか?

  16. 16

    ディレクトリ内のすべてのコード行を再帰的にカウントするにはどうすればよいですか?

  17. 17

    エラー時に内部監視のみを再試行するにはどうすればよいですか?

  18. 18

    コーディングの問題、これを修正するにはどうすればよいですか?

  19. 19

    PhantomJS内部エンコーディングを設定するにはどうすればよいですか?

  20. 20

    並列コーディングにforeach関数を使用するにはどうすればよいですか?

  21. 21

    このPHPコーディングにRelNo Followを追加するにはどうすればよいですか?

  22. 22

    このPHPコーディングにRelNo Followを追加するにはどうすればよいですか?

  23. 23

    Swift 3でAVCaptureSessionの再コーディングを開始するにはどうすればよいですか?

  24. 24

    値のハードコーディングを回避するにはどうすればよいですか?

  25. 25

    このコーディングをGoogleChromeで機能させるにはどうすればよいですか?

  26. 26

    再コーディングせずにクラスを変更するにはどうすればよいですか?

  27. 27

    コード内の要素のパディングを作成するにはどうすればよいですか?

  28. 28

    これをハードコーディングしないようにするにはどうすればよいですか?デコレータで

  29. 29

    Selectステートメントで行をハードコーディングするにはどうすればよいですか?

ホットタグ

アーカイブ