【发布时间】:2017-01-30 02:58:09
【问题描述】:
就在我以为我已经完成了承诺的时候,我又被难住了。我正在尝试使用递归函数来返回一个承诺。看起来它正在工作,但“then”部分永远不会被击中。我尝试使用$q.all,但这导致我多次调用我的 Web API 时出现问题。重写代码以使用递归似乎是答案,但我无法让“then”执行。我想我一定错过了一些简单的东西,但我似乎无法弄清楚到底是什么。
这是对函数的调用:
getClusterLink(linkcodes, returnString)
.then(function () {
value.vchTextBeforeQuestionCluster = $scope.returnString;
})
这里是递归函数:
function getClusterLink(linkcodes, returnString) {
var deferred = $q.defer();
$scope.returnString = returnString;
if (linkcount < linkcodes.length) {
contractorService.gethyperlink(linkcodes[linkcount])
.success(function (data) {
var vchUrl = data[0].vchUrl;
var end = vchUrl.length;
var docID = vchUrl.substring(vchUrl.indexOf("=") + 1, end);
var vchLinkName = data[0].vchLinkName;
var yay = '<a href="" ng-click="getDocumentByID(' + docID + ')">' + vchLinkName + '</a>';
var yCode = "|Y" + linkcodes[linkcount] + "~";
$scope.returnString = $scope.returnString.replaceAll(yCode, yay);
linkcount++;
return getClusterLink(linkcodes, $scope.returnString);
})
}
else {
deferred.resolve();
return deferred.promise;
}
};
函数本身可以正常工作。它击中了resolve 和return deferred.promise,但“then”永远不会触发。
非常感谢任何帮助!
【问题讨论】:
-
您没有在条件的第一个分支中返回任何内容......很惊讶您没有收到类型错误。
-
我愿意。我返回函数。
-
只有
return我在那个分支中看到在回调中 -
if中有return,else中有return。
-
@JaredSmith 是正确的。您的递归逻辑是正确的,因此它正在工作。但是,由于
getClusterLink在第一个“if”块中没有返回任何内容,因此承诺链被破坏了。return getClusterLink(...与成功回调中的匿名函数相关。如果contractorService.gethyperlink服务方法也是一个promise;也许尝试退货?:return contractorService.gethyperlink.
标签: javascript angularjs recursion