这个问题在这里已有答案:
我是node.js的新手,我遇到了一个函数返回未定义的问题 . 我使用console.log来确保它返回正确的值,它确实 . 但是在调用函数的脚本中显示为undefined . 我认为这可能是异步编程的问题?我想了解更多有关promises如何在node.js中工作的信息 . 我究竟做错了什么?
我认为这是异步问题的原因是因为console.log在getCurrentFrameName();中的console.log之前未定义打印到控制台 . var name被指定为undefined .
frameHandler.switchToFrame('top_page');
var name = frameHandler.getCurrentFrameName();
console.log(name);
此方法中的console.log在上面代码中的console.log之后打印到控制台 . 打印到名称控制台的值是top_page .
this.getCurrentFrameName = function()
{
driver.executeScript('return self.name').then(function(name) {
console.log(name);
return name;
});
};
2 回答
是的,这是异步编程的问题 . 您无法从异步回调中返回值 .
这是因为回调等待异步脚本执行,因此,节点会立即将控制权传递给回调后的下一行 .
在您的情况下,
console.log(name);
在执行回调之前被调用 . 因此,undefined
.对当前情况最简单的解决方案是在回调本身内执行必要的计算 .
但是,在更复杂的情况下(例如回调中的回调),您可以很容易地得到所谓的callback hell .
有几种方法可以处理回调地狱:其中一种叫做Promise .
Promise本质上做的是它为代码带来线性感,从而使其更容易理解和维护 .
在您的情况下,您可以这样做:
你可以这样做:
然后像这样调用它:
这将解决您的问题,但是,是同步问题 .