mql5-promise

1.0.0 • Public • Published

An interface for implementing asynchronous execution of algorithms for mql5, like Promise in JavaScript.

Example Promise :

void OnInit() {
    new Promise(printAndTimoutResolve, "111")
        .then(printAndReject, "222") // then - run if prev promise is resolved
        .ccatch(printAndResolve, "333") // ccatch - run if prev promise is rejected
        .ccatch(printAndResolve, "444")
        .ccatch(printAndResolve, "555")
        .then(printAndResolve, "666")
        .finally(printAndResolve, "end") // finally - run anything
        .destroy(); // clear memory theese promises after execution all promises

    Print("start");

    // printAndTimoutResolve 111   // timeout after Print
    // start
    // printAndReject 222
    // printAndTimoutResolve 333
    // printAndTimoutResolve 666
    // printAndTimoutResolve end
};

void promiseAllResolve(ulong promiseId, string &prevResult[], string parametr) {
    Print("promiseAllResolve " + parametr);
};

void printAndTimoutResolve(ulong promiseId, string prevResult, string parametr) {
    Print("printAndTimoutResolve " + parametr);
    Timer::setTimout(resolveByIdStr, 2000, string(promiseId));
};
void resolveByIdStr(string id) { Promise::resolveById(ulong(id)); }

void printAndResolve(ulong promiseId, string prevResult, string parametr) {
    Print("printAndResolve " + parametr);
    Promise::resolveById(promiseId);
};

void printAndReject(ulong promiseId, string prevResult, string parametr) {
    Print("printAndReject " + parametr);
    Promise::rejectById(promiseId);
};

Example Promise:all :

void OnInit() {
    Promise* list1[] = {
        new Promise(printAndTimoutResolve, "Promise 1")
            .then(printAndTimoutResolve, "Promise 1.1")
        ,
        new Promise(printAndReject, "Promise 2"),
        new Promise(printAndTimoutResolve, "Promise 3"),
    };

    Promise::all(list1, promiseAllResolve) // resolve if all promises are resolved
        .then(printAndResolve, "Promise::all resolved")
        .ccatch(printAndResolve, "Promise::all rejected")
        .destroy(); // delete all promises

    // printAndTimoutResolve Promise 1
    // printAndReject Promise 2
    // printAndTimoutResolve Promise 3
    // printAndResolve Promise::all rejected
};

Example Promise:race :

void OnInit() {
    Promise* list2[] = {
        new Promise(printAndTimoutResolve, "Promise 1")
            .then(printAndTimoutResolve, "Promise 1.1")
        ,
        new Promise(printAndReject, "Promise 2"),
        new Promise(printAndTimoutResolve, "Promise 3"),
    };

    Promise::race(list2, printAndResolve, "Promise::race") // resolve/reject after the first promise
        .then(printAndResolve, "Promise::race resolved")
        .ccatch(printAndResolve, "Promise::race rejected")
        .destroy();

    // printAndTimoutResolve Promise 1
    // printAndReject Promise 2
    // printAndTimoutResolve Promise 3
    // Promise::race rejected
};

Example Promise:any :

void OnInit() {
    Promise* list3[] = {
        new Promise(printAndTimoutResolve, "Promise 1")
            .then(printAndTimoutResolve, "Promise 1.1")
        ,
        new Promise(printAndReject, "Promise 2"),
        new Promise(printAndTimoutResolve, "Promise 3"),
    };

    Promise::any(list3, printAndResolve, "Promise::any")
        .then(printAndResolve, "Promise::any resolved")
        .ccatch(printAndResolve, "Promise::any rejected")
        .destroy();

    // printAndTimoutResolve Promise 1
    // printAndReject Promise 2
    // printAndTimoutResolve Promise 3
    // printAndResolve Promise::any
    // printAndResolve Promise::any resolved
};

Package Sidebar

Install

npm i mql5-promise

Weekly Downloads

2

Version

1.0.0

License

ISC

Unpacked Size

18.6 kB

Total Files

3

Last publish

Collaborators

  • senails