我试图了解承诺如何运作,但我没有得到结果。我尝试了很多例子,没有任何作用。
此代码是一个Parse云代码函数,它接收一个数组o字符串,每个字符串都是我请求的url的一部分,因此,如果我收到一个包含3个元素的数组,则代码必须使httprequest为3 url& #39;收集3个回复并将其发送给客户。这就是我所做的:
Parse.Cloud.define('getInfo', function(request,response) {
var placas = request.params.placa;
x(placas, function(result){
response.success(result);
}, function(error){
response.error(error);
});
});
function x(placas,callback,error){
var url1 = 'http://XXXXX/';
var promises = [];
for(var i=0; i<placas.length ;i++){
var url2 = url1.concat(placas[i]);
promises.push(requestMulta(url2));
}
var data = Parse.Promise.as(promises);
callback(data);
}
function requestMulta(url){
var promise = new Parse.Promise();
Parse.Cloud.httpRequest({
url: url ,
headers: {
'Content-Type': 'application/json;charset=utf-8'
}
}).then(function(httpResponse) {
...
promise.resolve(data);
}, function(httpResponse) {
//Handle error
});
return promise;
}
我得到的回应是:
{
"_rejected" = 0;
"_rejectedCallbacks" = (
);
"_resolved" = 1;
"_resolvedCallbacks" = (
);
"_result" = (
(
"<null>", // 3 null's because I'm testing with an array o 3 elements
"<null>",
"<null>"
)
);
}
答案 0 :(得分:0)
通过检查documentation我输入以下内容:
Parse.Cloud.define('getInfo', function(request,response) {
var placas = request.params.placa;
x(placas).then(function(result){
response.success(result);
}).error(function(error){
response.error(error);
});
});
function x(placas,error){
var url1 = 'http://XXXXX/';
var promises = [];
for(var i=0; i<placas.length ;i++){
var url2 = url1.concat(placas[i]);
promises.push(requestMulta(url2));
}
return Parse.Promise.when(promises);
}
您正在使用Parse.Promise.as
来解决承诺,请查看Parse.Promise.as的文档。
检查Parse.Promise.when
的{{3}}。
答案 1 :(得分:0)
我最终改变了一些事情,我希望这对某人有用。
我没有使用Promise,而是安装了库Async(http://caolan.github.io/async/),它可以帮助您创建多个异步函数,并且它非常易于使用。
新守则:
Parse.Cloud.define('getInfo', function(request,response) {
var placas = request.params.placa; //this is an array whith the variables I'll use in the functons
x(placas).then(function(result){
response.success(result);
}).error(function(error){
response.error(error);
});
});
function x(placas,callback,error){
async.map(placas, requestMulta, function(err, results) {
console.log(results)
callback(results);
});
}
function requestMulta(placa, callback){
var url = 'http://XXXXX/' + placa;
Parse.Cloud.httpRequest({
url: url ,
headers: {
'Content-Type': 'application/json;charset=utf-8'
}
}).then(function(httpResponse) {
//... (The process you want)...
callback(null,data);
}, function(httpResponse) {
var data = {};
console.error('Request failed with response code ');
error("Error");
});
}