Javascript AngularJS:多个$http请求,然后承诺返回未定义的
在尝试使用AngularJS连续发出两个http请求后,我没有收到第二个http请求的响应 我有以下代码:Javascript AngularJS:多个$http请求,然后承诺返回未定义的,javascript,angularjs,json,http,promise,Javascript,Angularjs,Json,Http,Promise,在尝试使用AngularJS连续发出两个http请求后,我没有收到第二个http请求的响应 我有以下代码: createBucket: function (bucketKey, policyKey) { // get token from json file return $http({ url: tokenUrl }) .then(function
createBucket: function (bucketKey, policyKey) {
// get token from json file
return $http({
url: tokenUrl
})
.then(function (response) {
token = response.data;
console.log('refreshing access token');
console.log(token);
})
.then(function (response) {
// use token to create new bucket
$http({
method: 'POST',
headers: {
"Authorization": token.token_type + " " + token.access_token
},
url: "https://developer.api.autodesk.com/oss/v2/buckets",
data: {
"bucketKey": bucketKey,
"policyKey": policyKey
}
});
}).then(processResponse);
},
首先,我执行一个http请求以获取json文件。然后使用这个json文件中的信息,我执行另一个http请求,我想返回这个请求的结果。在最终代码中:
// Send the data part of the response
function processResponse(response) {
console.log('response:');
console.log(response);
return response.data;
}
此处的响应未定义。。我不知道为什么…你的每个
。然后,
需要返回一些东西:
createBucket: function (bucketKey, policyKey) {
// get token from json file
return $http({
url: tokenUrl
})
.then(function (response) {
token = response.data;
console.log('refreshing access token');
console.log(token);
return response;
})
.then(function (response) { // Response was already undefined here. The reason why token had something is because you surely have defined it in a parent javascript scope.
// use token to create new bucket
$http({
method: 'POST',
headers: {
"Authorization": token.token_type + " " + token.access_token
},
url: "https://developer.api.autodesk.com/oss/v2/buckets",
data: {
"bucketKey": bucketKey,
"policyKey": policyKey
}
});
return response;
}).then(processResponse);
},
链接承诺时,您需要从每个返回一个新的承诺。然后步骤将在后续的每个步骤中执行。您有太多的
然后
s。。。当链接然后
语句时,请确保每个语句都返回下一个语句的承诺。尝试:
createBucket: function (bucketKey, policyKey) {
// get token from json file
$http({
url: tokenUrl
})
.then(function (response) {
token = response.data;
console.log('refreshing access token');
console.log(token);
return $http({
method: 'POST',
headers: {
"Authorization": token.token_type + " " + token.access_token
},
url: "https://developer.api.autodesk.com/oss/v2/buckets",
data: {
"bucketKey": bucketKey,
"policyKey": policyKey
}
});
})
.then(processResponse);
}
您需要返回链接的值
createBucket: function (bucketKey, policyKey) {
// get token from json file
return $http({
url: tokenUrl
})
.then(function (response) {
var token = response.data;
console.log('refreshing access token');
console.log(token);
//return token for chaining
return token;
})
.then(function (token) {
//save 2nd httpPromise for chaining
var p1 = $http({
method: 'POST',
headers: {
"Authorization": token.token_type + " " +
token.access_token
},
url: "https://developer.api.autodesk.com/oss/v2/buckets",
data: {
"bucketKey": bucketKey,
"policyKey": policyKey
}
//return httpPromise for chaining
return p1;
});
}).then(processResponse);
},
最后,我选择这样做:
createBucket: function (bucketKey, policyKey) {
// get access token from json file
return $http({
url: tokenUrl
})
.then(function (response) {
return response.data;
})
.then(function (token) {
// use response.data / access token to create new bucket
return $http({
method: 'POST',
headers: {
"Authorization": token.token_type + " " + token.access_token
},
url: "https://developer.api.autodesk.com/oss/v2/buckets",
data: {
"bucketKey": bucketKey,
"policyKey": policyKey
}
})
.then(successCallback, function errorCallback(response) {
displayError(response);
});
});
},
第二个http请求现在也执行了,问题是我没有从第二个http请求得到结果。我可以看到我在控制台中执行了第二个http请求。但是processResponse方法从未执行或未定义。谢谢,但是processResponse方法仍然没有执行,即使第二个http请求是…您需要在链接到
processResponse
函数之前返回第二个承诺。