У меня есть 2 файла. Один (get_data. js) получает данные из API, получая токен доступа, используя его для получения URL-адреса, содержащего данные, затем получая данные csv из этого URL-адреса и преобразовывая их в JSON. Второй файл (process_data. js) просто console.logs, который JSON data.
Содержимое get_data. js (в псевдокоде, так как файл довольно длинный и все отдельные функции работают). работает нормально).
module.exports.getData = () => {
new Promise((resolve, reject) => {
resolve(get_access_token()); // returns an access token from a web api
})
.then((access_token) => {
return new Promise((resolve, reject) => {
resolve(get_url()); // returns a url from a web api
})
})
.then((url) => {
return new Promise ((resolve, reject) => {
resolve(get_data_from_url(url)); // returns a csv in a string from url
})
})
.then((csv_data) => {
return new Promise ((resolve, reject) => {
resolve(convert_csv_to_json()); // returns data in a json string
})
})
}
Содержимое process_data. js:
const dataHandler = require('./get_data');
dataHandler.getData()
.then(
(JSON_data) => {
console.log("JSON_data: ".concat(JSON_data))
}
)
То, что я хочу, это
- run process_data. js
- получает данные из get_data. js
- выводит эти данные на консоль (пока)
Однако при первом обратном вызове API в get_data . js, цепочка обещаний из process_data. js продолжается и печатает 'undefined', и я не уверен, почему он не ждет различных обратных вызовов от get_data. js. Странно, что если я запускаю get_data. js с console.log (json_data), добавленным в конец кода, все работает нормально. Проблема в том, что мне нужно разделить мой код на модули. Любая помощь будет принята с благодарностью! Ошибка, напечатанная на консоли ниже:
.then((JSON_data) => {console.log("JSON_data: ".concat(JSON_data))})
^
TypeError: Cannot read property 'then' of undefined
at Object.<anonymous> (/Users/tom/Desktop/stuff/process_data.js:5:1)
at Module._compile (internal/modules/cjs/loader.js:955:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
at Module.load (internal/modules/cjs/loader.js:811:32)
at Function.Module._load (internal/modules/cjs/loader.js:723:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
at internal/main/run_main_module.js:17:11