Как найти ошибочные правила в json-rules-engine
Я новичок в движке правил, и я пытаюсь создать движок правил в JavaScript.
У меня есть следующее правило и передача одного параметра в качестве неправильного ввода, как найти, какой аргумент (факт) не соответствует.
Событие выдает сообщение без сбойных правил, интересно, как получить сбойные параметры.
Пожалуйста, дайте мне знать, что делать в этой ситуации.
npm json-rules-engine
Правила:
engine.addRule({
conditions: {
any: [{
all: [{
fact: 'gameDuration',
operator: 'equal',
value: 40
}, {
fact: 'personalFoulCount',
operator: 'greaterThanInclusive',
value: 5
}]
}, {
all: [{
fact: 'gameDuration',
operator: 'equal',
value: 48
}, {
fact: 'personalFoulCount',
operator: 'greaterThanInclusive',
value: 6
}]
}]
},
event: { // define the event to fire when the conditions evaluate truthy
type: 'fouledOut',
params: {
message: 'Player has fouled out!'
}
}
})
**input:**
`let facts = {
personalFoulCount: 6,
gameDuration: 102
}`
**output:**
Player has fouled out!
**expected output:**
Player has fouled out due to a mismatch in gameDuration
0 ответов
Мы можем использовать on
способ получить failure/success
событие правила. В приведенном ниже примере возвращается количество правил успеха и неудач.
let facts = [{
personalFoulCount: 6,
gameDuration: 102
},
{
personalFoulCount: 6,
gameDuration: 40
}]
engine.addRule({
conditions: {
all: [{
fact: 'gameDuration',
operator: 'equal',
value: 40
}]
},
event: { type: 'procedure_result'}
})
let result = {success_count : 0 , failed_count : 0}
engine.on('success', () => result.success_count++)
.on('failure', () => result.failed_count++)
const getResults = function(){
return new Promise((resolve, reject) => {
facts.forEach(fact => {
return engine.run(fact)
.then(() => resolve())
})
})
}
getResults().then(() => console.log(result));
Выход: { success_count: 1, failed_count: 1 }
Недавно я использовал этот модуль npm: json-rules-engine попал в ту же ситуацию и предложил решение это может быть точное решение или нет, но служит цели
Решение: определите несколько объектов правил и передайте их механизму, чтобы получить невыполненные правила.
Детали: 1. Из приведенного выше примера в массиве conditions.any есть 2 объекта. 2. создайте 2 объекта правила с именем ruleName, как показано ниже. const createRule = (условия, ruleName) => ({ условия, событие: {type: ruleName}, }); 3. создать объект Engine, передав массив правил const engine = новый движок (список правил); 4. После того, как факты столкнутся с правилами движка, неудавшиеся правила могут быть выведены следующим образом: т.е. engine.run(факты).then (results => { // результаты. события пройдут правила // чтобы получить невыполненные правила: ведем список имен правил и фильтруем переданные правила });