戻り値がundefinedとなります
get_ticker
は何もreturn
していないので当然undefined
になります。そしてrequest
は非同期に取得するのでその結果をget_ticker
が戻り値として返すことは不可能です。
get_ticker
がcallbackを受け取るようにするか、
js
1const request = require('request')
2
3setInterval(function () {
4 get_ticker('https://api.crypto-bridge.org/api/v1/ticker', (err, result) => {
5 if (result) console.log(result)
6 })
7}, 5000)
8
9//ticker情報を取得
10const get_ticker = (ticker, cb) => {
11 cb = cb || (() => {})
12 request.get({
13 uri: ticker,
14 json: true,
15 }, function (err, req, data) {
16 if (err) {
17 cb(err)
18 return
19 }
20 cb(null, data[1].id)
21 })
22}
Promise
を返すようにすればできます。
js
1const request = require('request')
2
3setInterval(function () {
4 get_ticker('https://api.crypto-bridge.org/api/v1/ticker').then(result => {
5 console.log(result)
6 })
7}, 5000)
8
9const get_ticker = (ticker) => new Promise((resolve, reject) => {
10 request.get({
11 uri: ticker,
12 json: true,
13 }, function (err, req, data) {
14 if (err) {
15 reject(err)
16 return
17 }
18 resolve(data[1].id)
19 })
20})
21
もっとも、request
のPromise
バージョンであるrequest-promise
などを使えばもっとすっきり書けます。
js
1const rp = require('request-promise')
2
3setInterval(function () {
4 get_ticker('https://api.crypto-bridge.org/api/v1/ticker').then(result => {
5 console.log(result)
6 })
7}, 5000)
8
9const get_ticker = (ticker) => rp.get({
10 uri: ticker,
11 json: true,
12}).then(data => data[1].id)
async/await
でもできます。
js
1const rp = require('request-promise')
2
3setInterval(async function () {
4 const result = await get_ticker('https://api.crypto-bridge.org/api/v1/ticker')
5 console.log(result)
6}, 5000)
7
8const get_ticker = (ticker) => rp.get({
9 uri: ticker,
10 json: true,
11}).then(data => data[1].id)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/27 20:38