Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript承诺返回值_Javascript_Es6 Promise - Fatal编程技术网

Javascript承诺返回值

Javascript承诺返回值,javascript,es6-promise,Javascript,Es6 Promise,我正在尝试制作一个爬虫程序,由于数据没有显示在页面源代码中,我只能使用web驱动程序执行javascript并获得响应,然后进行数据分析。 脚本是简化的,像这样,使用Promise var res = "" function f1() { p = window.Promise a = p.resolve(5).then(function(value) { console.log(value) res = value return

我正在尝试制作一个爬虫程序,由于数据没有显示在页面源代码中,我只能使用web驱动程序执行javascript并获得响应,然后进行数据分析。 脚本是简化的,像这样,使用Promise

var res = ""

function f1() {
    p = window.Promise
    a = p.resolve(5).then(function(value) {
        console.log(value)
        res = value
        return res
    })
    return a
}
console.log(f1()) // Promise object
console.log("result = ", res) // res is empty
我的程序是这样的,用c#编写:

我想得到这个值,我知道
然后
总是返回Promise对象,所以我定义了一个变量,并想将值存储到它。但是看起来,承诺是异步执行的,所以res总是空的

好的,我正在编写一个爬虫程序,并使用Selenium从服务器获取响应(Selenium.webdriver可以打开web浏览器,然后执行脚本),我需要得到结果,因为它将被其他程序使用。所以,我不能再加一个。然后,只输出值。也许我可以保存到一个本地文件,然后读取它,但我认为这是低效的


有人可以帮忙吗?

当您尝试记录全局
res
时,结果尚未计算出来。使用承诺时,必须使用
异步获得结果。然后使用
,如下所示:

f1().then(res => console.log("result =", res));

当您尝试记录全局
res
时,尚未计算结果。使用承诺时,必须使用
异步获得结果。然后使用
,如下所示:

f1().then(res => console.log("result =", res));
试试这个
你不正确地使用了承诺

f1()。然后(res=>console.log('result=',res))。

试试这个
你不正确地使用了承诺


f1()。然后(res=>console.log('result=',res))。

您使用的承诺不正确
f1()。然后(res=>console.log('result=',res))
。更多信息请参见。也许您正在寻找?(这是Java文档,但C#必须有类似的内容)
executeScript
似乎是针对同步JavaScript的,而您显然没有同步JavaScript。如果我正确理解了你的问题,你就不能控制JavaScript了?但是是的,承诺是异步的。今年,C#中还有一个函数executeAsyncScript,但是当我调用它时,会抛出一个错误,表示无法在0秒内得到结果,然后我将超时时间设置为5秒(5秒足以得到响应),但它也表示无法在5秒内得到结果。。。然后我放弃了这种方式,我找到了另一种方式来获得结果。我尝试在页面中创建一个元素,并将文本设置为返回值。然后,搜索我创建的元素。它起作用了!不管怎样,谢谢你的建议。你的承诺用错了
f1()。然后(res=>console.log('result=',res))
。更多信息请参见。也许您正在寻找?(这是Java文档,但C#必须有类似的内容)
executeScript
似乎是针对同步JavaScript的,而您显然没有同步JavaScript。如果我正确理解了你的问题,你就不能控制JavaScript了?但是是的,承诺是异步的。今年,C#中还有一个函数executeAsyncScript,但是当我调用它时,会抛出一个错误,表示无法在0秒内得到结果,然后我将超时时间设置为5秒(5秒足以得到响应),但它也表示无法在5秒内得到结果。。。然后我放弃了这种方式,我找到了另一种方式来获得结果。我尝试在页面中创建一个元素,并将文本设置为返回值。然后,搜索我创建的元素。它起作用了!无论如何,谢谢你的建议。这个问题显然是重复的。为什么要回答?注释(因为答案很简单),然后搜索重复标记。像这样吗,哦,首先,我以前搜索过它,我的问题与此不同,因为“获取值”和“使用值”是两部分,也是在两个不同的过程中。你能编辑你的问题以包含你正在使用Selenium的当前代码吗?这个问题显然是重复的。为什么要回答?注释(因为答案很简单),然后搜索重复标记。像这样吗,哦,首先,我之前已经搜索过了,我的问题与此不同,因为“获取值”和“使用值”是两部分,也是在两个不同的过程中。你能编辑你的问题以包含你正在使用的Selenium的当前代码吗?