私はNodeJで私の最初のステップを踏み出しています。私はJavaの世界から来て、私の頭は非同期コードを書くときに立ち往生した。 I/Oブロック操作を扱うときに非同期フローについて多くのことを読んだことがありますが、この問題の解決方法はわかりません。ノードの理解非同期コード
私はポイントの経度と緯度を取得するために "ポイント"オブジェクトのインスタンスを作成するとき私は、Google API呼び出しを行っています。
私の "app.js"フローでは、その内部にその経度と緯度を必要とする別の関数を呼び出す関数を呼び出します。ご覧のとおり、この時点でGoogle APIコールは戻ってこなかったので、「未定義」を取得しました。
この問題を「非同期方式」で考えるにはどうすればよいですか?あなたは非同期を呼び出す場合があることに注意してください
//app.js
const express = require('express');
const POI = require('./models/poi');
var app = express();
app.get('/', (req, res) => {
var poiA = new POI(19146, "Saraza", 2, 3);
var poiB = new POI(19146, "Saraza", 4, 5);
console.log(poiA.estaAXMetrosDeOtroPoi(poiB, 10));
});
app.listen(3000);
const Point = require('./point');
function POI (direccion, nombre) {
var self = this;
var direction = direccion;
var nombre = nombre;
var point = new Point(direccion);
self.getPoint =() => {
return point;
};
self.estaAXMetrosDeOtroPoi = (otroPoi, distancia) => {
let poiDistance = point.distanceBetweenPOIsCoords(point, otroPoi.getPoint());
return (distancia >= poiDistance);
};
}
module.exports = POI;
var geolib = require('geolib');
var geoCode = require('../services/geoCode');
function Point (direccion){
var self = this;
self.latitude;
self.longitude;
self.geoLocalizate = (direccion) => {
//Here i am making google API call
geoCode.geocodeAddress(direccion, (errorMessage, results) => {
if(errorMessage){
self.latitude = null;
self.longitude = null;
}else{
self.latitude = results.latitude;
self.longitude = results.longitude;
}
});
};
self.geoLocalizate(direccion);
self.getCoord =() => {
return {"latitude": self.latitude, "longitude": self.longitude};
};
//Function throwing error, becouse of latitude, longitude "Undefined"
self.distanceBetweenPOIsCoords = (pointA, pointB) => {
let coordA = pointA.getCoord();
let coordB = pointB.getCoord();
return geolib.getDistance(coordA, coordB);
};
};
の方法は、それがJavaである方法に似ているように、あなたはコールバックに渡し、アクションが実行されたら、関数はそれを呼び出します。 –
はい、私は理解していますが、私の問題をどのように解決することができますか? –
https://www.slideshare.net/NishchitDhanani/async-history-javascript –