This implementation shows the basic idea of how Promises and their callbacks could be handled using the C++ Programming Language. In other words, it's the basic design of Promises in C++.
Some of the examples taken from understanding-javascript-promises
void e1(){
auto a1 = ECMA::Promise<int, int>([](auto resolve){
resolve(5101);
});
auto a2 = ECMA::Promise<int>([](auto resolve, auto reject){
reject(11);
});
a1.then([](auto resolve, auto reject){
std::cout << resolve << std::endl;
});
a2.then([](auto resolve, auto reject){
std::cout << reject << std::endl;
});
a1.then([](auto resolve){ // not able to "resolve" a Promise a second time
std::cout << "S: " << resolve << std::endl;
});
// or
ECMA::Promise<int, int>::resolve(5101).then([](auto resolve, auto reject){
std::cout << resolve << std::endl;
});
ECMA::Promise<int>::reject(11).then([](auto resolve, auto reject){
std::cout << reject << std::endl;
});
// or even
ECMA::Promise<int, int>::resolve(50).await(); // 50
// how to use async
ECMA::Promise<int>::async((std::function<int(int)>)[](auto v){
return v;
}, 5).then([](auto resolve){
std::cout << resolve << std::endl;
});
}
void e2(){ // handling errors
ECMA::Promise<std::string, Error>([](auto resolve, auto reject){
throw Error("Error");
})._catch([](auto err){
std::cout << err << std::endl;
});
// or
ECMA::Promise<std::string>([](auto resolve, auto reject){
reject("Error");
})._catch([](auto err){
std::cout << err << std::endl;
});
}
void e3(){ // cascading errors
ECMA::Promise<int, char*>([](auto resolve, auto reject){
throw (char*)"ERR";
})._catch([](auto err){
// std::cout << err << std::endl;
throw (char*)"SEC";
})._catch([](auto err){
std::cout << err << std::endl;
});
}