#javascript #node.js
Вопрос:
Я хотел бы преобразовать приведенный ниже рабочий код
const Client = require('node-rest-client').Client;
const Rest = new Client();
const useRestClient = (url,args,_next)=> {
return new Promise(resolve => {
Rest.post(url,args, (data,_response) =>
{
resolve(data);
})
})
}
к чему-то вроде этого:
const Client = require('node-rest-client').Client;
const Rest = new Client();
function callRestPost(resolve, url, args)
{
return Rest.post(url,args, (data,_response) =>
{
resolve(data);
});
}
const useRestClient = (url,args,_next)=> {
return new Promise(callRestPost);
}
Это правильно? Причина, по которой я это делаю, заключается в том, чтобы издеваться над методом Rest.post для модульного тестирования. Я ограничен использованием мокко синон для тестирования, и я новичок в JS и node.js. Пожалуйста, помогите.
Ответ №1:
Вы близки, вам просто нужно пройти в args..
const Client = require('node-rest-client').Client;
function callRestPost(resolve, url, args)
{
return Rest.post(url,args, (data,_response) => {
resolve(data);
});
}
const useRestClient = (url,args,_next)=> {
return new Promise((resolve, reject) => {
try {
return callRestPost(resolve, url, args);
} catch (err) {
reject(err);
}
});
}
Однако в чем причина для принятия решения?
ИМО что-то вроде этого чище.
const Client = require('node-rest-client').Client;
const RestClient = new Client();
function callRestPost(restClient, url, args) {
return new Promise((resolve, reject) => {
try {
restClient.post(url, args, (data, resp) => {
if (resp.status !== 200) reject(resp.status);
resolve(data);
});
} catch (err) {
reject(err);
}
});
}
// Use it like:
callRestPost(RestClient, "some.url", [foo, bar, baz]);
Ответ №2:
Я бы переписал это так.
const Client = require('node-rest-client').Client;
const Rest = new Client();
function callRestPost(resolve, url, args) {
return Rest.post(url,args, function(data,_response) {
resolve(data);
});
}
function useRestClient(url,args,_next) {
return new Promise(function(resolve) {
return callRestPost(resolve, url, args)
});
}