JavaScript如何输出result1和result2的值
JavaScript How to output the value of result1 and result2
下面的脚本只输出变量“result2”的值
如何在不使用console.log的情况下输出“result1”和“result2”的值,因为我将把这个脚本放在C#的cefSharp框架中,cefSharp不输出“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;
这是关于 cefSharp
中执行 JavaScript 和 Promise 的信息
在此浏览器主框架的上下文中评估 Javascript。该脚本将异步执行,方法 return 是一个封装来自 Javascript 的响应的任务。 javascript 中脚本执行的结果是 Promise.resolve 因此即使没有承诺值也会被视为承诺。您的 javascript 应该 return 一个值。 javascript 将被包装在立即调用的函数表达式中。当承诺触发 then/catch 时,此 returned 任务将完成。
var script = "return new Promise(function(resolve, reject) { setTimeout(resolve.bind(null, { a: 'CefSharp', b: 42, }), 1000); });"
JavascriptResponse javascriptResponse = await browser.EvaluateScriptAsPromiseAsync(script);
console.log 调用仅显示前一条语句的值,仅此而已。
在 promise 函数之外使用结果可能会出现问题 - promise 可能会在此之后完成。也许想调查 async/await?
Promise.all 包办一切
我不确定 C# 方面的事情,但正如 JavaScript 所说:
如果您想访问承诺的两个结果,您可能有兴趣实施 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);
});
此示例实现现在可以使用所有承诺的所有结果。
下面的脚本只输出变量“result2”的值
如何在不使用console.log的情况下输出“result1”和“result2”的值,因为我将把这个脚本放在C#的cefSharp框架中,cefSharp不输出“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;
这是关于 cefSharp
中执行 JavaScript 和 Promise 的信息在此浏览器主框架的上下文中评估 Javascript。该脚本将异步执行,方法 return 是一个封装来自 Javascript 的响应的任务。 javascript 中脚本执行的结果是 Promise.resolve 因此即使没有承诺值也会被视为承诺。您的 javascript 应该 return 一个值。 javascript 将被包装在立即调用的函数表达式中。当承诺触发 then/catch 时,此 returned 任务将完成。
var script = "return new Promise(function(resolve, reject) { setTimeout(resolve.bind(null, { a: 'CefSharp', b: 42, }), 1000); });"
JavascriptResponse javascriptResponse = await browser.EvaluateScriptAsPromiseAsync(script);
console.log 调用仅显示前一条语句的值,仅此而已。
在 promise 函数之外使用结果可能会出现问题 - promise 可能会在此之后完成。也许想调查 async/await?
Promise.all 包办一切
我不确定 C# 方面的事情,但正如 JavaScript 所说:
如果您想访问承诺的两个结果,您可能有兴趣实施 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);
});
此示例实现现在可以使用所有承诺的所有结果。