EDITED: скорректировал мой рассказ и попытался добавить вывод в код, как показывают примеры, но он не работает.Что я делаю не так?
Привет, эксперты или энтузиаст, превосходящий меня,
Вопрос в том, «как правильно получить вывод из асинхронной функции в node.js в качестве возврата».Все примеры говорят об этой загадочной функции обратного вызова, но в контексте моего кода я не вижу, как она применяется или реализуется.
Да, вопрос задавался много раз, если бы мне пришлось его задаватьопять же, потому что предоставленные объяснения не получили этого новичка к пониманию.Да, я потратил около 24 часов, пытаясь следовать примерам, документации и другим постам, но я не нашел ни одного, который бы объяснил достаточно ясно, чтобы я мог применить к своему коду.
КонцепцияАсинхронный имеет смысл, код выполняется, но, в этом случае, вызов https не имеет.Код не ждет звонка https.Вы должны каким-то образом получить результат после его завершения.Хотя я не нашел практичности этого, я уверен, что я буду продолжать, поскольку я продолжаю изучать, почему node.js особенный в этом смысле.Предполагая, что мое понимание в основном верно, мой вопрос остается прежним.Концепция - это одно, а приложение и синтаксис - другое.
Это, кажется, общий вопрос, с которым почти у каждого новичка возникают проблемы.
Пока что ни один из примеров или объяснений не проясняет, где и как с чем я работаю.Я понимаю, что есть дополнительные модули, которые обрабатывают их по-разному, но я полагаю, что не пойму «почему / как», как это применимо, пока не пойму это правильно.
Поскольку я новичок в node.js, не стесняйтесьподробнее о любом аспекте моего кода, который я хочу изучить.
Если кто-то найдет этот код, он получит данные от официального API Clash Royal, для которого вам необходимо зарегистрировать свой IP-адрес и получить токен отhttps://developer.clashroyale.com.
app.js
require('dotenv').config();
var func = require('./functions.js');
console.log(func.uChests(process.env.MyPlayer)); //this should output the value
functions.js
require('dotenv').config();
//console.log('Loaded Functions')
module.exports.uChests = func_uChests
//Clearly wrong application
//function func_uChests (playerID) {
function func_uChests (playerID,output) {
//console.log('uChests')
var http = require("https");
var options = {
"method": "GET",
"hostname": "api.clashroyale.com",
"port": null,
"path": "/v1/players/%23"+ playerID + "/upcomingchests",
"headers": {
"content-length": "0",
"authorization": "Bearer " + process.env.Token,
"accept": "application/json"
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
console.log(body.toString());
/* example output
{"items":[{"index":0,"name":"Magical Chest"},{"index":1,"name":"Silver Chest"},{"index":2,"name":"Silver Chest"},{"index":3,"name":"Golden Chest"},{"index":4,"name":"Silver Chest"},{"index":5,"name":"Silver Chest"},{"index":6,"name":"Silver Chest"},{"index":7,"name":"Golden Chest"},{"index":8,"name":"Silver Chest"},{"index":22,"name":"Legendary Chest"},{"index":40,"name":"Giant Chest"},{"index":76,"name":"Super Magical Chest"},{"index":77,"name":"Epic Chest"}]}
{"items":[{"index":0,"name":"Magical Chest"},{"index":1,"name":"Silver Chest"},{"index":2,"name":"Silver Chest"},{"index":3,"name":"Golden Chest"},{"index":4,"name":"Silver Chest"},{"index":5,"name":"Silver Chest"},{"index":6,"name":"Silver Chest"},{"index":7,"name":"Golden Chest"},{"index":8,"name":"Silver Chest"},{"index":22,"name":"Legendary Chest"},{"index":40,"name":"Giant Chest"},{"index":76,"name":"Super Magical Chest"},{"index":77,"name":"Epic Chest"}]}
*/
});
});
req.end();
}
//Clearly wrong application
function uChests(input, output) {
func_uChests(input, output);
console.log(output);
};