我正在如下使用init
$scope.init = function () {
$scope.getAllDetails();
};
$scope.getAllDetails= function () {
$http({
method: "GET",
url: "api/endpoint"
}).then(function mySuccess(response) {
$scope.processData();
}, function myError(response) {
console.log(response.statusText);
}
);
};
$scope.processData() = function() {
//Logic to calculate var1
// var1 is then passed to $scope.getID to make call to Service1.getId(var1)
}
我有第一个返回诺言的函数:
$scope.getID = function() {
return Service1.getId("abc").then(function(response){
// In above line. Instead of manually passing `abc` I want to
//pass it as variable var1
// The desired call should be as below.
//But var1 is having null here
//return Service1.getId(var1).then(function(response){
$scope.genewtId = response.data[0].Id;
console.log($scope.genewtId);
return response.data[0].Id;
}, function(error){
console.log(error.statusText);
throw error;
});
};
第二个函数返回一个promise并接受一个参数:
$scope.getDetails = function(id) {
var genewtID = id || $scope.genewtId;
return Service2.getDetails(genewtId).then(function(response){
$scope.data1 = response.data;
console.log($scope.data1.toString());
return response.data;
}, function(error){
console.log(error.statusText);
throw error;
});
};
然后chaining这两个承诺:
var promise = $scope.getId();
var promise2 = promise.then(function(id) {
return $scope.getDetails(id);
});
var promise2.then(function(data) {
console.log(data);
}).catch(function(error) {
console.log(error);
});
问题:
我面临的问题与var1
中的$scope.processData()
有关
var1
在null
中始终具有$scope.getID
的值
var1
的值为undefined
答案 0 :(得分:0)
像这样的声音可能是关闭问题。函数可以访问在定义处而不是在调用处的代码包含的闭包。
var1是真正的null
,还是实际上是undefined
?如果是undefined
,则可能需要做的是使getId将var1作为 argument 而不是依靠从包含的闭包中提取引用(由于上述原因,该引用不起作用) )。如果它确实是null
,那么问题可能出在计算var1的代码中,您已经省略了。
编辑:getID()
函数看起来非常相似,但是它会像这样开始:
$scope.getID = function(var1) {
代替此:
$scope.getID = function(var1) {
要调用它,您可能会执行以下操作:
var var1 = somethingToGetTheValueOfVar1();
$scope.getID(var1);
答案 1 :(得分:0)
我面临的问题与
var1
中的$scope.processData()
有关var1
始终在null
值的$scope.getID
内具有var1
值是undefined
将var1
添加为函数定义的参数:
̶$̶s̶c̶o̶p̶e̶.̶g̶e̶t̶I̶D̶ ̶=̶ ̶f̶u̶n̶c̶t̶i̶o̶n̶(̶)̶ ̶{̶
$scope.getID = function(var1) {
//return Service1.getId("abc").then(function(response){
// In above line. Instead of manually passing `abc` I want to
//pass it as variable var1
// The desired call should be as below.
//But var1 is having null here
return Service1.getId(var1).then(function(response){
$scope.genewtId = response.data[0].Id;
console.log($scope.genewtId);
return response.data[0].Id;
}, function(error){
console.log(error.statusText);
throw error;
});
};
我正在尝试按以下方式调用该函数,但是它不起作用
$scope.processData() = function() { ... $scope.getID(var1); }
assignment statement的左侧必须是变量或属性访问器。
$̶s̶c̶o̶p̶e̶.̶p̶r̶o̶c̶e̶s̶s̶D̶a̶t̶a̶(̶)̶ ̶=̶ ̶f̶u̶n̶c̶t̶i̶o̶n̶(̶)̶ ̶{̶ ̶
$scope.processData = function(data) {
//...
var var1 //= something
return $scope.getID(var1);
}
然后确保正确链接:
$scope.getAllDetails= function () {
return $http({
method: "GET",
url: "api/endpoint"
}).then(function mySuccess(response) {
var data = response.data;
return $scope.processData(data);
}, function myError(response) {
console.log(response.statusText);
//IMPORTANT RE-THROW error
throw response;
});
};
将return的值分配到.then
块很重要。否则,新的承诺将解析为undefined
。
同样重要的是,.catch
个块中的throw。否则,新的承诺将从拒绝的承诺转换为已实现的承诺
有关更多信息,请参见