MetaTrader 5 / 程序库

承诺 - MetaTrader 5程序库

198
(6)
实现算法异步执行的接口,类似于 JavaScript 中的 Promise。
timer.mqh -定时器,仅用于演示异步执行

您也可以 使用 npm 包管理器下载
npm i mql5-promise

Promise 示例:

 #include "timer.mqh" #include "index.mqh" void OnInit () {      new Promise(printAndTimoutResolve, "111" )         .then(printAndReject, "222" ) // then - 如果前一个承诺已解决,则运行         .ccatch(printAndResolve, "333" ) // ccatch - 在前一个承诺被拒绝时运行         .ccatch(printAndResolve, "444" )         .ccatch(printAndResolve, "555" )         .then(printAndResolve, "666" )         .finally(printAndResolve, "end" ) // 最后 - 运行任何程序         .destroy(); // 执行完所有承诺后,清除这些承诺的内存      Print ( "start" );      // printAndTimoutResolve 111 // 打印后超时      // 开始      // 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); };


例如,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) // 如果所有承诺都已解决,则进行解析         .then(printAndResolve, "Promise::all resolved" )         .ccatch(printAndResolve, "Promise::all rejected" )         .destroy(); // 删除所有承诺      // printAndTimoutResolve Promise 1      // 打印并拒绝承诺 2      // printAndTimoutResolve Promise 3      // printAndResolve Promise::all rejected };


Promise example: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" ) // 在第一个承诺后解析/拒绝         .then(printAndResolve, "Promise::race resolved" )         .ccatch(printAndResolve, "Promise::race rejected" )         .destroy();      // printAndTimoutResolve Promise 1      // 打印并拒绝承诺 2      // printAndTimoutResolve Promise 3      // 拒绝接受 Promise::race };



例如 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      // 打印并拒绝承诺 2      // printAndTimoutResolve Promise 3      // printAndResolve Promise::any      // printAndResolve Promise::any resolved };



由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/54412