我有以下代码,我试图连续执行httpt请求 以下是代码
var httpPostData = function (postparameters,postData){
return $http ({
method : 'POST',
url : URL,
params : postparameters,
headers: headers,
data : postData
}).success (function (responseData){
return responseData.data;
})
}
for (var app of appArray){
var addAppPromise = httpPostData (restartAppParams,app);
addAppPromise.then(function(status){
console.log(status.data);
})
}
appArray 是我逐个连接的服务器列表,并根据我通过上面的http post传递(restartAppParams)参数做一些事情。
我希望这种执行是连续发生的,即只有当前一个http请求完成并且收到响应时,才应执行下一个http请求。 不知道该怎么做..
答案 0 :(得分:2)
您可以使用Array.prototype.reduce
来实现此目标:
.controller('Samplecontroller', function($http, $q) {
var restartAppParams = {};
var httpPostData = function(postparameters, postData){
return $http ({
method : 'POST',
url : URL,
params : postparameters,
headers: headers,
data : postData
});
};
appArray.reduce(function(promise, app) {
return promise.finally(function() {
return httpPostData(restartAppParams, app)
.then(function(response) {
console.log(response.data);
});
})
}, $q.when());
});
答案 1 :(得分:1)
试试这个:
import maya.cmds as cmds
cmds.sphere(nsp=10, r=50)
cmds.sphere(nsp=4, r=5)
cmds.setAttr("nurbsSphere2.translateX",-12.583733)
cmds.setAttr("nurbsSphere2.translateY",-2.2691557)
cmds.setAttr("nurbsSphere2.translateZ",48.33736)
cmds.nurbsBoolean("nurbsSphere1", "nurbsSphere2", nsf=1, op=1)
cmds.sphere(nsp=4, r=5)
cmds.setAttr("nurbsSphere3.translateX",-6.7379503)
cmds.setAttr("nurbsSphere3.translateY",3.6949043)
cmds.setAttr("nurbsSphere3.translateZ",49.40595)
cmds.nurbsBoolean("nurbsBooleanSurface1", "nurbsSphere3", nsf=1, op=1)
print(cmds.ls("nurbsBooleanSurface1_*", type="transform"))
答案 2 :(得分:0)
angularjs默认使用异步ajax调用。它实际上是硬编码的,无法更改(参见this commit中的第77行,当时是主分支的HEAD,我正在写这个)。
另外,请记住,同步调用会阻止其他所有基本上违反javascript为其构建的非阻塞方法的内容。
如果你的应用程序依赖于一个接一个的请求,你可以使用promise和递归调用链接它们。
这样的事情应该有效:
function runXhr(app) {
var addAppPromise = httpPostData (restartAppParams,app);
addAppPromise.then(function(status){
console.log(status.data);
// calls the next service if appArray has any services left
var app = appArray.shift();
if (app) {
runXhr(appArray.shift());
}
else {
return;
}
});
}