Javascript Promise返回值

时间:2016-12-16 04:02:38

标签: 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 res
    })
    return a
}
console.log(f1()) // Promise object
console.log("result = ", res) // res is empty

我的程序是这样的,用c#编写:

 public void GetParameters(string url)
        {
            IWebDriver driver = new ChromeDriver();
            driver.Navigate().GoToUrl(url);
            IJavaScriptExecutor js = driver as IJavaScriptExecutor;
            string script = readFile(@"C:\myscript.js", Encoding.UTF8).TrimEnd(); // The script is a bit long, so I save it to a local file.
            var json = js.ExecuteScript(script);
            Console.WriteLine("Get the return value");
            Console.WriteLine(json);
            driver.Close();
        }

我想获取值,我知道then总是返回Promise对象,所以我定义了一个变量,并希望将值存储到它。但似乎是,Promise是异步执行的,因此res总是为空。

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

任何人都可以提供帮助吗?

2 个答案:

答案 0 :(得分:2)

当您尝试记录全局res时,结果尚未计算。使用Promises时,您必须使用.then异步获取结果,如下所示:

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

答案 1 :(得分:2)

试试这个 你错误地使用了承诺。

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