Я не думаю, что причина определяется с помощью кода, который вы в настоящее время представляете. Скорее всего, это связано с тем, как вы звоните safeGithubPush
. Если вы сделаете что-то, что изменит привязку this
, this.safeString
потерпит неудачу.
const foo = {
fizz() {
console.log("fizz");
},
buzz() {
this.fizz();
}
};
// "this" is correct
foo.buzz();
// "this" has no fizz to call
const myFizz = foo.buzz;
myFizz();
Учитывая, что вы присоединяете их к module.exports
Я собираюсь догадаться, что вы отключаете эти функции при вызове require
, а затем пытаетесь использовать их голыми, что делает проблема очевидна после просмотра моего примера выше:
// Ignore these 2 lines, they let this look like node
const module = {};
const require = () => module.exports;
// Ignore above 2 lines, they let this look like node
// Your module "some.js"
module.exports = {
safeString(str) {
return true;
},
safeGithubPush(currentJob) {
if (!this.safeString("some")) {
throw new Error("Not safe");
}
return true;
}
};
try {
// Some consumer module that doesn't work
const {safeGithubPush} = require("./some.js");
const isItSafe = safeGithubPush();
console.log(`Safe? ${isItSafe}`);
} catch (err) {
console.error("Didn't bind right \"this\"");
}
try {
// Some consumer module that DOES work
const someModule = require("./some.js");
const isItSafe = someModule.safeGithubPush();
console.log(`Safe? ${isItSafe}`);
} catch (err) {
console.error(err);
}
Я бы перестроил этот код. Вы говорите, что это служебные функции, которые заставляют меня думать, что вам не нужно структурировать их с учетом this
.
Вместо того, чтобы присоединять их все к module.exports
при их определении, определите их снаружи и напрямую ссылаться на функции, которые вы хотите использовать, , затем присоедините их к exports
, чтобы другие модули могли использовать функции:
function safeString(stringToCheck) {
return true;
}
function safeGithubPush(currentJob) {
if (!safeString("some")) {
throw new Error("Not safe");
}
return true;
}
module.exports = {
safeString,
safeGithubPush
};