Node.jsの非同期でAPIデータを取得し、データを取得することで同期する

モンキーマン905

作成中の Node 天気アプリについて助けが必要です。Google API を使用して住所の緯度と経度を取得し、これを Dark Sky API にフィードして天気を JSON 形式で返しています。

私の問題は、ほとんどの場合、Google API が経度と緯度を返す前に Weather API が検索を行うことです。Node の非同期性のために、なぜそれを行うのかはわかっています。私の質問は、代わりにこの部分をどのように同期させるのですか?

var express = require('express');
var https = require('https')
var bodyParser = require("body-parser");

var app = express();

app.use(bodyParser.urlencoded({
extended: true
}));

app.use(bodyParser.json());

var lon;

var lat;

app.post('/', function(req,res,next){

var search = req.body.search;


function google(){

    var api = "API-KEY";

    var url = https.get(`https://maps.googleapis.com/maps/api/geocode/json?address=${search}&key=${api}`, function(res3){

        var body = "";
        var googleResults;

        res3.on('data', function(data){
            body += data.toString();
        })

        res3.on('end', function(){

            googleResults = JSON.parse(body);
            //console.log(body);
            lat = googleResults.results[0].geometry.location.lat;
            lon = googleResults.results[0].geometry.location.lon;
            console.log(search);
        })

    });

}


google();

//connectc to API URL()
var request = https.get(`https://api.darksky.net/forecast/API-KEY/${lon},${lat}`, function(res2){

console.log(lon + " " + lat)
            var body = "";
            var weather;
            //Read the data
            res2.on('data', function(data){
                body += data.toString();

            })

            res2.on('end', function(){
                    //Parse the data
                     weather = JSON.parse(body);
                    //Print data
                    //console.log("test = " + weather.currently.temperature)
                    res.render('index', {
                        temperature: weather.currently.temperature,
                        humidity: weather.currently.humidity,
                        wind: weather.currently.windSpeed
                    });
            })

});



});
ジョーダン・ソルトマン

コードをあまり再構築せずに行う最も簡単な方法は、google()コールバック関数を引数として取ることです。次に、そのコールバック関数を使用して、暗い空への呼び出しをトリガーできます。

var express = require('express');
var https = require('https')
var bodyParser = require("body-parser");

var app = express();

app.use(bodyParser.urlencoded({
  extended: true
}));

app.use(bodyParser.json());

app.post('/', function(req, res, next) {

  var search = req.body.search;

  // Have google() take a callback function as an argument and
  // call that function with the data when it's done.
  function google(cb) {

    var api = "API-KEY";

    var url = https.get(`https://maps.googleapis.com/maps/api/geocode/json?address=${search}&key=${api}`, function(res3) {

      var body = "";
      var googleResults;

      res3.on('data', function(data) {
        body += data.toString();
      })

      res3.on('end', function() {

        googleResults = JSON.parse(body);
        //console.log(body);
        lat = googleResults.results[0].geometry.location.lat;
        lon = googleResults.results[0].geometry.location.lon;
        // Call the function here
        cb(lat, lon);
      })

    });

  }

  // Now use the callback to do your second request to darksky
  google(function(lat, lon) {
    //connectc to API URL()
    var request = https.get(`https://api.darksky.net/forecast/API-KEY/${lon},${lat}`, function(res2) {

      console.log(lon + " " + lat)
      var body = "";
      var weather;
      //Read the data
      res2.on('data', function(data) {
        body += data.toString();

      })

      res2.on('end', function() {
        //Parse the data
        weather = JSON.parse(body);
        //Print data
        //console.log("test = " + weather.currently.temperature)
        res.render('index', {
          temperature: weather.currently.temperature,
          humidity: weather.currently.humidity,
          wind: weather.currently.windSpeed
        });
      })

    });
  }});


});

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

node.jsのデータベースを非同期でクエリする

分類Dev

Node.jsの非同期axiosリクエストからデータを取得する方法

分類Dev

非同期データを返し、Node.jsで同期的にエクスポートします

分類Dev

node.js:非同期データをグローバルに利用できるようにする方法

分類Dev

node.jsで複数のリターンを非同期的に処理する

分類Dev

Node.JS-どの非同期HTTPGET応答がコールバックでデータを返しているかを識別する方法は?

分類Dev

Rest apiからデータ非同期を取得し、node.jsを使用してmongodbにロードします-promiseを使用します

分類Dev

マングースからデータを取得する際のNode.js非同期試行/キャッチエラー

分類Dev

node.jsでjqueryのPOSTデータを取得する

分類Dev

返されたデータに「Promise」を表示するNode.JS非同期

分類Dev

zalgoを解き放つNode.jsデザインパターンで、非同期パスが一貫しているのはなぜですか?

分類Dev

非同期node.js環境でデータベース操作を実行します

分類Dev

非同期データを使用してNode.jsでwhileループ

分類Dev

node.jsのmongodbから非同期でデータにアクセスする際の問題

分類Dev

node.jsでこの関数を非同期にする方法

分類Dev

node.jsでmysqlからデータを取得する方法

分類Dev

Node.jsサーバー上の複数のクライアント間でデータを同期する方法

分類Dev

Node.jsのAPIから取得したJSONデータを変更する

分類Dev

Node.jspuppeteer-要素なしでデータを取得する

分類Dev

データnode.jsをejsファイルに送信し、angular.jsでデータを取得する方法

分類Dev

Node.jsで非同期エラーを処理する方法

分類Dev

node.jsでjsonデータキー値を取得します

分類Dev

モジュールのエクスポートとしてPromiseを提供することは、Node.jsでの非同期初期化の有効なパターンですか?

分類Dev

Node.JSで先行入力のあるLiveSearchがデータを取得しないのはなぜですか

分類Dev

node.jsで同期的にmysqlクエリの出力を取得する

分類Dev

AWS Lambda node.js非同期関数からデータを返す方法は?

分類Dev

2つの非同期操作でNode.JSでBluebirdPromisesを使用する

分類Dev

node.jsを使用して非同期でデータをロードするサイトをスクレイプするにはどうすればよいですか?

分類Dev

Node.jsを解析するときにデータを取得する方法

Related 関連記事

  1. 1

    node.jsのデータベースを非同期でクエリする

  2. 2

    Node.jsの非同期axiosリクエストからデータを取得する方法

  3. 3

    非同期データを返し、Node.jsで同期的にエクスポートします

  4. 4

    node.js:非同期データをグローバルに利用できるようにする方法

  5. 5

    node.jsで複数のリターンを非同期的に処理する

  6. 6

    Node.JS-どの非同期HTTPGET応答がコールバックでデータを返しているかを識別する方法は?

  7. 7

    Rest apiからデータ非同期を取得し、node.jsを使用してmongodbにロードします-promiseを使用します

  8. 8

    マングースからデータを取得する際のNode.js非同期試行/キャッチエラー

  9. 9

    node.jsでjqueryのPOSTデータを取得する

  10. 10

    返されたデータに「Promise」を表示するNode.JS非同期

  11. 11

    zalgoを解き放つNode.jsデザインパターンで、非同期パスが一貫しているのはなぜですか?

  12. 12

    非同期node.js環境でデータベース操作を実行します

  13. 13

    非同期データを使用してNode.jsでwhileループ

  14. 14

    node.jsのmongodbから非同期でデータにアクセスする際の問題

  15. 15

    node.jsでこの関数を非同期にする方法

  16. 16

    node.jsでmysqlからデータを取得する方法

  17. 17

    Node.jsサーバー上の複数のクライアント間でデータを同期する方法

  18. 18

    Node.jsのAPIから取得したJSONデータを変更する

  19. 19

    Node.jspuppeteer-要素なしでデータを取得する

  20. 20

    データnode.jsをejsファイルに送信し、angular.jsでデータを取得する方法

  21. 21

    Node.jsで非同期エラーを処理する方法

  22. 22

    node.jsでjsonデータキー値を取得します

  23. 23

    モジュールのエクスポートとしてPromiseを提供することは、Node.jsでの非同期初期化の有効なパターンですか?

  24. 24

    Node.JSで先行入力のあるLiveSearchがデータを取得しないのはなぜですか

  25. 25

    node.jsで同期的にmysqlクエリの出力を取得する

  26. 26

    AWS Lambda node.js非同期関数からデータを返す方法は?

  27. 27

    2つの非同期操作でNode.JSでBluebirdPromisesを使用する

  28. 28

    node.jsを使用して非同期でデータをロードするサイトをスクレイプするにはどうすればよいですか?

  29. 29

    Node.jsを解析するときにデータを取得する方法

ホットタグ

アーカイブ