El siguiente script genera solo el valor de la variable "resultado2"
Cómo generar el valor de "result1" y "result2" sin usar console.log, porque pondré este script en el marco cefSharp de C#, cefSharp no genera datos que están en "console.log"
var result; var result2; const myPromise = new Promise( function(resolve) { var a1 = 2 + 2; resolve(a1); } ); myPromise .then(res=>{return result = res;}); result; //output=4 myPromise .then(res2=>{result = res2+1; return result2=result;}); result2; //output=5
var result; var result2; const myPromise = new Promise( function(resolve) { var a1 = 2 + 2; resolve(a1); } ); myPromise .then(res=>{return result = res;}); result; myPromise .then(res2=>{result = res2+1; return result2=result;}); result2;
Aquí está la información sobre cómo ejecutar JavaScript y Promise en cefSharp
Evalúe Javascript en el contexto de este marco principal de navegadores. El script se ejecutará de forma asíncrona y el método devuelve una Tarea que encapsula la respuesta del Javascript. El resultado de la ejecución del script en javascript es Promise.resolve, por lo que incluso ningún valor de promesa se tratará como una promesa. Su javascript debe devolver un valor. El javascript se envolverá en una expresión de función invocada inmediatamente. Cuando la promesa se active o capture esta tarea devuelta se completará.
var script = "return new Promise(function(resolve, reject) { setTimeout(resolve.bind(null, { a: 'CefSharp', b: 42, }), 1000); });" JavascriptResponse javascriptResponse = await browser.EvaluateScriptAsPromiseAsync(script);
La llamada a console.log solo muestra el valor de la declaración anterior y nada más.
Usar el resultado fuera de la función de promesa puede ser un problema: la promesa podría terminar después. ¿Tal vez quiera ver async/await ?
No estoy seguro sobre el lado C# de las cosas, pero como dice JavaScript:
Si desea acceder a ambos resultados de las promesas, es posible que le interese implementar Promise.all
const myPromise = new Promise( function(resolve) { let result = 410; resolve(result + 10); } ); const myPromise2 = new Promise( function(resolve) { let result2 = 67; resolve(result2 + 2); } ); Promise.all([myPromise, myPromise2]).then((values) => { // These are all results from all promises // You can analyze/modify/copy their results with a forEach or however you like. console.log(values); });
Esta implementación de ejemplo ahora puede usar todos los resultados de todas las promesas.