在 node.js 中使用 setInterval 和 promise 调用休息 api
calling a rest api with setInterval and promise in node.js
我是 nodejs 新手。我开发了一个以一秒为间隔调用休息 API 的函数。
理论上我应该每秒都有一个新结果,但控制台只显示一个结果。不知道为什么。
const https = require('https');
const url = 'https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT';
const promise = new Promise((resolve, reject) => {
let price = '';
const interval = setInterval(() => {
https.get(url, (response) => {
let data = '';
// A new chunk of data has been received.
response.on('data', (chunk) => {
data += chunk;
});
// The whole response has been received, print out the result.
response.on('end', () => {
// returns formatted price
price = JSON.parse(data).price;
price = (price * 100) / 100;
resolve(price)
});
});
}, 1000);
});
promise.then((price) => {
console.log('Current price ' + price);
});
尝试将承诺包装在 setInterval
回调中。
此外,您可能喜欢使用异步请求包,例如 got。
const https = require("https")
const url = "https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT"
const interval = setInterval(() => {
const promise = new Promise((resolve, reject) => {
let price = ""
https.get(url, response => {
let data = ""
// A new chunk of data has been received.
response.on("data", chunk => {
data += chunk
})
// The whole response has been received, print out the result.
response.on("end", () => {
// returns formatted price
price = JSON.parse(data).price
price = (price * 100) / 100
resolve(price)
})
})
})
promise.then(price => {
console.log("Current price " + price)
})
}, 1000)
承诺 feature
,解决 only one time
。您必须为 post 新价值创建一个新承诺。对于您的情况,event emitter
是最好的。
// const https = require("https")
const promiseOnce = new Promise(r => {
setInterval(() => {
const date = new Date();
r(date);
}, 1000);
});
promiseOnce.then(x => console.log(x)); // will resolve once
events:: EventEmitter
const EventEmitter = require("events");
const priceEmitter = new EventEmitter();
setInterval(() => {
const date = new Date();
priceEmitter.emit("price", date);
}, 1000);
priceEmitter.on("price", price => {
console.log(price); // Will emit always
});
我是 nodejs 新手。我开发了一个以一秒为间隔调用休息 API 的函数。
理论上我应该每秒都有一个新结果,但控制台只显示一个结果。不知道为什么。
const https = require('https');
const url = 'https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT';
const promise = new Promise((resolve, reject) => {
let price = '';
const interval = setInterval(() => {
https.get(url, (response) => {
let data = '';
// A new chunk of data has been received.
response.on('data', (chunk) => {
data += chunk;
});
// The whole response has been received, print out the result.
response.on('end', () => {
// returns formatted price
price = JSON.parse(data).price;
price = (price * 100) / 100;
resolve(price)
});
});
}, 1000);
});
promise.then((price) => {
console.log('Current price ' + price);
});
尝试将承诺包装在 setInterval
回调中。
此外,您可能喜欢使用异步请求包,例如 got。
const https = require("https")
const url = "https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT"
const interval = setInterval(() => {
const promise = new Promise((resolve, reject) => {
let price = ""
https.get(url, response => {
let data = ""
// A new chunk of data has been received.
response.on("data", chunk => {
data += chunk
})
// The whole response has been received, print out the result.
response.on("end", () => {
// returns formatted price
price = JSON.parse(data).price
price = (price * 100) / 100
resolve(price)
})
})
})
promise.then(price => {
console.log("Current price " + price)
})
}, 1000)
承诺 feature
,解决 only one time
。您必须为 post 新价值创建一个新承诺。对于您的情况,event emitter
是最好的。
// const https = require("https")
const promiseOnce = new Promise(r => {
setInterval(() => {
const date = new Date();
r(date);
}, 1000);
});
promiseOnce.then(x => console.log(x)); // will resolve once
events:: EventEmitter
const EventEmitter = require("events");
const priceEmitter = new EventEmitter();
setInterval(() => {
const date = new Date();
priceEmitter.emit("price", date);
}, 1000);
priceEmitter.on("price", price => {
console.log(price); // Will emit always
});