Как найти ошибочные правила в 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 => {
               // результаты. события пройдут правила
               // чтобы получить невыполненные правила: ведем список имен правил и фильтруем переданные правила 
        });
Другие вопросы по тегам