如何链接一系列返回promises的函数,并需要不同的参数?

时间:2015-02-15 15:19:15

标签: javascript angularjs angular-promise

我有两个异步函数,它们使用已经以某种方式获取的参数:

var a = getUserinput();
var b = getUserinput();
var c = getUserinput();
var d = getUserinput();


var func1 = function(valA, valB){
     var deferred = $q.deferred;
     //http call with valA, valb...
     // when complete, resolve deferred
     return deferred.promise;
}

var func2 = function(valC, valD){
     var deferred = $q.deferred;
     //http call with valC, valD...
     // when complete, resolve deferred
     return deferred.promise;
}

我想执行func1然后func2。问题是我无法找到成功完成此操作的方法,同时能够为func2提供参数。

例如,如果我这样做

func1(a, b).then(func2(c, d));

func2func1完成之前执行。

如何在func2完成后执行func1

func

2 个答案:

答案 0 :(得分:3)

提供匿名函数并在其中放置func2调用:

func1(a, b).then(function() {
    func2(c, d);
});

答案 1 :(得分:0)

如果有帮助,我最近在C中为UNIX编写了第一个流氓版本,并重写了javascript以便在浏览器中工作。我使用了一种名为continuation的技术,能够等待用户输入密钥,因为在javascript中没有中断。

所以我会有一段这样的代码:

void function f() {

  // ... first part

  ch = getchar();

  // ... second part

}

将在

中转换
function f() {

  // ... first part

  var ch = getchar(f_cont1);

  return;
  // the execution stops here 

  function f_cont1 () {

    // ... second part
  }
}

然后存储继续以在keypressed事件上重用。有了闭包,一切都会在停止的地方重新启动。