在继续下一行之前,如何确保承诺得到解决?

时间:2014-06-30 03:35:05

标签: javascript selenium-webdriver jasmine protractor

说我有以下内容:

var myFuncResult = null;                
browser.executeScript( "return myFunc();").then( function(i){
    myFuncResult = i;
    // console.log([ "myFunc is: ", i]); this is fine
});
console.log([ "myFunc is: ", myFuncResult]);
//do something about myFunctResult
myFuncResult.doSomethingElse();

现在外部console.log正在记录null,因为它已在promise得到解决之前执行。我该如何预防呢?如何确保我提供的功能首先在console.log之前执行?我需要初始化myFuncResult才能继续执行其余的行。

1 个答案:

答案 0 :(得分:1)

没有办法做你想要的,这是设计的。 promise将以异步方式运行,因此{1}}语句将始终在您的promise得到解决之前运行。在解析promise之后运行console.log语句的正确方法是添加另一个console.log子句,如下所示:

then

您需要小心处理错误情况,因为如果拒绝承诺,则不会调用var myFuncResult = null; browser.executeScript( "return myFunc();").then( function(i){ myFuncResult = i; // console.log([ "myFunc is: ", i]); this is fine }).then(function() { console.log([ "myFunc is: ", myFuncResult]); }); 子句的第一个参数。

是的,这可能导致意大利面的承诺,但它(稍微)好于回调地狱。享受javascripting!