立即解决承诺

Resolve promise immediately

本文关键字:承诺 解决      更新时间:2023-09-26

是否可以立即有效地解决角度承诺,使代码表现得像同步调用?我知道这违背了承诺的目的,但我想这样做是为了单元测试。我的测试表明,then立即被调用,但我不确定这里是否存在then仍然被视为异步的潜在时序问题?

function someService(){
  var deferred = $q.defer();
  deferred.resolve(myObj); 
  return deferred.promise;
} 
someService().then(function(obj){
  //will this be executed right away just like it would if this was a synchronous call?
  // more code here under test
});
var myVal = 10;

myVal赋值会在then回调之前执行吗?或者我可以相信那一刻会马上过去吗?

您的单元测试可以模拟服务并返回promise;这样就可以测试您的.then()

这个主题包含在类似的问题中:

  • Angular中基于promise的单元测试代码

要点是:

  • 调用CCD_ 3和CCD_
  • 您的模拟服务返回promise

回到你的问题:

myVal赋值会在then回调之前执行吗?或者可以我相信那个时候总会马上过去?

有人(@gp)在评论中对此进行了报道。回调是异步的,所以它可能会立即执行,也可能不会立即执行。为了确保您的分配按正确的顺序完成,您可以预先初始化它,或者在then回调中初始化它,并正确地链接它们。