Я относительно новичок в JavaScript и, похоже, у меня возникли проблемы с работой функций обратного вызова «успех / ошибка» при использовании Ax ios.
Например, запустив следующий тестовый код интеграции с помощью jest (npm тестовая команда), я получаю вывод, приведенный ниже. Мне интересно, почему сообщение «my-ping-2 success». или «ошибка my-ping-3: ...» не выводится на консоль. Я пытаюсь убедиться, что вызывающая сторона внутренних функций может при желании передать функции обратного вызова для ситуаций успеха и ошибок. Что я делаю неправильно? Заранее спасибо!
Подробности: Я знаю, что локальный сервер API работает нормально, он возвращает HTTP-статус 200, если я посещаю URL http://localhost: 9090 / api / v1 / ping и тесты через почтальона. Ниже приведен полный исходный код, который может воспроизвести проблему на моем компьютере (MacOS, nodejs версия v12.16.1, npm версия 6.13.4).
Я использую метод generi c ax ios (config) во внутренней функции, потому что я использую ту же внутреннюю функцию для вызовов HTTP get / post. Я надеюсь, что все в порядке.
вывод консоли jest
PASS src/__tests__/01_my.test.js
● Console
console.log src/__tests__/01_my.test.js:14
my-ping-1...
console.log src/__tests__/01_my.test.js:20
my-ping-4 done.
Исходный код для воспроизведения проблемы
import axios from "axios";
import { isEmpty, merge } from 'lodash';
const baseURL = 'http://localhost:9090/api/v1/';
const headers = {
Accept: 'application/json',
};
const source = axios.CancelToken.source();
test('Test my-appcode', done => {
console.log('my-ping-1...');
fw_get_1('/ping', function(response) {
console.log('my-ping-2 success.');
}, function(error) {
console.log('my-ping-3 error: ' + fw_jsonFormatter(error));
} );
console.log('my-ping-4 done.');
done();
});
function fw_get_1(url, successCallback = null,
errorCallback = null) {
return fw_get_2(url, {}, successCallback, errorCallback);
}
function fw_get_2(url, configs = {},
successCallback = null,
errorCallback = null) {
url = encodeURI(url);
return fw_request_3('get', url, configs, successCallback, errorCallback);
}
function fw_request_3(method, url, configs = {},
successCallback = null,
errorCallback = null) {
let inputCfgs = {
params: configs.params,
data : configs.data,
headers : configs.headers
};
const axiosOptions = merge(
{},
{
method,
url,
baseURL,
headers,
cancelToken: source.token
},
inputCfgs
);
return axios(axiosOptions).then( function(response) {
if (successCallback) {
console.log('fw_request_internal success-1 method: ' + axiosOptions.method + ' url: ' + axiosOptions.url);
successCallback(response);
} else {
console.log('fw_request_internal success-2 method: ' + axiosOptions.method + ' url: ' + axiosOptions.url);
}
}).catch(function (error) {
if (errorCallback) {
console.log('Calling input errorCallback method: ' + axiosOptions.method + ' url: ' + axiosOptions.url + fw_jsonFormatter(error));
errorCallback(error);
} else {
console.log('fw_request_internal error-2 method: ' + axiosOptions.method + ' url: ' + axiosOptions.url);
console.log(fw_jsonFormatter(error));
}
});
}
function fw_jsonFormatter(obj) {
return JSON.stringify(obj, null, 1);
}