MetaTrader 5 / Bibliotheken

Versprechen - Bibliothek für den MetaTrader 5

127
(6)
Eine Schnittstelle zur Implementierung der asynchronen Ausführung von Algorithmen, ähnlich wie Promise in JavaScript.
timer.mqh - timer, nur um die asynchrone Ausführung zu demonstrieren

Sie können auch über den npm-Paketmanager herunterladen
npm i mql5-promise

Promise Beispiel :

 #include "timer.mqh" #include "index.mqh" void OnInit () {      new Promise(printAndTimoutResolve, "111" )         .then(printAndReject, "222" ) // dann - ausführen, wenn vorheriges Versprechen aufgelöst wird         .ccatch(printAndResolve, "333" ) // ccatch - wird ausgeführt, wenn das vorherige Versprechen abgelehnt wird         .ccatch(printAndResolve, "444" )         .ccatch(printAndResolve, "555" )         .then(printAndResolve, "666" )         .finally(printAndResolve, "end" ) // schließlich - alles ausführen         .destroy(); // Löscht den Speicher dieser Versprechen, nachdem alle Versprechen ausgeführt wurden      Print ( "start" );      // printAndTimoutResolve 111 // Timeout nach Druck      // 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); };


Zum Beispiel, 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) // auflösen, wenn alle Versprechen aufgelöst sind         .then(printAndResolve, "Promise::all resolved" )         .ccatch(printAndResolve, "Promise::all rejected" )         .destroy(); // alle Versprechen löschen      // printAndTimoutResolve Verheißung 1      // printAndReject Verheißung 2      // printAndTimoutResolve Verheißung 3      // printAndResolve Promise::all abgelehnt };


Beispiel für ein Versprechen:Rennen:

 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" ) // Auflösen/Ablehnen nach dem ersten Versprechen         .then(printAndResolve, "Promise::race resolved" )         .ccatch(printAndResolve, "Promise::race rejected" )         .destroy();      // printAndTimoutResolve Verheißung 1      // printAndReject Verheißung 2      // printAndTimoutResolve Verheißung 3      // Promise::race abgelehnt };



Zum Beispiel: 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 Verheißung 1      // printAndReject Verheißung 2      // printAndTimoutResolve Verheißung 3      // printAndResolve Promise::any      // printAndResolve Promise::any aufgelöst };



Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/54412