说我有以下内容:
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才能继续执行其余的行。
答案 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!