おそらく非同期の関数を同期的に実行したいのだと推測します。
そのような場合はPromiseを使用すれば解決できます。
request関数をPromiseを返す実装に変更し、利用側ではasync/awaitを使用するのが一番スマートです。
javascript
1// requestメソッド
2
3const request = url => {
4
5 return new Promise(resolve => {
6 let result = '';
7
8 // 何かしらの処理
9
10 resolve(result);
11 });
12};
javascript
1// 利用側
2
3const method = async () => {
4
5 const request = require('request');
6
7 const result = await request(A_URL);
8
9 // resultに結果が代入されるまでここには到達しない
10
11 request(`${B_URL}?p=${result}`);
12};
13
14method();
※ともにエラー処理は書いていません
※async/awaitが使えない環境ならthenを使用する必要があります
もしPromiseが使えない環境であれば、コールバックを渡せるように実装するしかありません。
コールバック地獄に陥るので非推奨ではあります。
javascript
1// requestメソッド
2
3const request = (url, callback = null) => {
4 let result = '';
5
6 // 何かしらの処理
7
8 if(callback) callback(result);
9};
javascript
1// 利用側
2
3const method = () => {
4 const request = require('request');
5
6 request(A_URL, result => {
7 // reusltに結果が入っている
8 request(`${B_URL}?p=${result}`);
9 });
10};
11
12method();
HTTP通信を行うことが目的であれば、Promiseで実装されている「request-promise」等の使用をおすすめします。
その他のモジュールでも、一般的にはPromiseを返すかコールバックを渡せるように実装されているはずです。
Promiseについては「javascript promise」等で調べてみてください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。