私を許してくださいますが、非常に新しい開発者として、これが参照される質問の正確な複製であるかどうかわかりません。私はAJAXが何であるか分かりません。私の状況で提案されたソリューションをどのように適応させるのか分かりません。Node.jsモジュールから非同期関数によって更新された値を返すにはどうすればよいですか?
私は、Web APIから株価を取得し、別のWeb APIから通貨換算値を取得し、株価をUSDからAUDに変換する非常に単純なノードアプリケーションを作成しています。私はこれを1つのファイルで完結させましたが、簡単にするために複数のモジュールに分割することを選択しました。そして今私はそれを壊しました:)
基本的に私は私のGetStockPrice()関数に検索し、必要なクエリを実行し、結果を返します。
var returned = GetStockPrice('AMZN');
console.log(returned);
それは私のGetStockPriceモジュールに更新されていないとして返される値は、常に10:
これは私が私のモジュールを呼び出す方法です。ここで
は私のモジュール内のコードです:
var http = require('http');
var stockPrice = 10;
function GetStockPrice(ticker) {
var options = {
host: 'dev.markitondemand.com',
port: 80,
path: '/MODApis/Api/v2/Quote/json?symbol=' + ticker,
method: 'GET'
};
http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
res.setEncoding('utf8');
res.on('data', function(chunk) {
const json = JSON.parse(chunk);
stockPrice = json.LastPrice;
});
}).end();
return (stockPrice)
};
module.exports = GetStockPrice;
私は私が間違ってやっているのか理解私の関数がreturn文に到達する時間によってので、http.requestは、非同期で実行されています、非同期呼び出しが完了していないので、戻り値、stockPriceは、最初に初期化したときと同じです。残念ながら、私はそれを修正する方法がわかりません。私はhttp.request関数の中でreturn文を動かそうとしましたが、どちらも動作しません。
誰でも助けてください。
async begync async:まだ*値はありません。パターンをすべて*進めていく。好ましくはPromisesまたはReactJSを使用して、ノード自体に接着するために必要に応じて明示的なコールバックを使用します(ただし、promisify-wrapperがあります)。 – user2864740
あなたのベルトの下に何千もの記事を載せている皆さんと同じように見えるかもしれませんが、リンゴとオレンジを比較するのと同じように15の記事を掲載した新しい開発者には、このような決定を下す前に、新しい開発者であったことを思い出してください。だからこれは別の投稿と似ているかもしれませんが、私はその投稿を見て私の質問に答えることはできませんし、まだ私の問題に助けが必要です。 –
プログラミングでは、問題を特定し、解決策を一般化し、特定の状況に知識を適用します。投稿された他の回答を読んだ後に問題が残っている場合は、特定の点について具体的な説明を求めてください。 2000年以上の投票による質問は、正確な問題を説明し、次のステップにつながります。あまりにも個人的にあまりにもそれを取ることはお勧めしません:} – user2864740