javascript - Parse Promises Multiple httpRequest Cloud Code -
i'm writing ios app parse.com , cloud code. want retrieve objects contain 1 picture , other informations website , want add them class named news. when run code, every object saved (in class, 1 row = 1 retrieved object) unfortunately first 1 has picture saved.... idea ?
i made lot of searches promises (series / parallels) , think problem comes here..
note : don't worry mylink, myimglink : put make code easy read !
parse.cloud.define("rajoutenews", function(request, response) { parse.cloud.httprequest({ url: 'myurl'}).then(function(httpresponse) { var news = []; var newsclass = parse.object.extend("news"); (var = 0; < 10 ; ++i) { var manews = new newsclass(); manews.set("link", mylink[i]); // "other informations" manews.set("imglink", myimglink[i]); manews.set("title", mytitle[i]); var promises = []; promises.push(parse.cloud.httprequest({ url: $('img').attr('src'), method: 'get', }).then(function(httpresponse){ var imgfile = new parse.file("photo.jpg", {base64:httpresponse.buffer.tostring('base64')}); manews.set("image",imgfile); // picture return manews.save(); })); news.push(manews); } promises.push(parse.object.saveall(news, { success: function (list) { response.success(news.length.tostring() + " ont été sauvegardées"); }, error: function (list, err) { response.error("error adding news"); } })); return parse.promise.when(promises); }).then(function(bla,result){ response.success("job done"); }, function(error) { response.error(error); } ); });
your
promisesarray should put out of loop scope. otherwise ,promisearray assigned new blank array each loop.parse.filesaved automaticly when parent save, don't need save in advance.
so improve code following, try , tell me weather works.
parse.cloud.define("rajoutenews", function(request, response) { parse.cloud.httprequest({ url: 'myurl' }).then(function(httpresponse) { var promises = []; var newsclass = parse.object.extend("news"); (var = 0; < 10; ++i) { var manews = new newsclass(); manews.set("link", mylink[i]); // "other informations" manews.set("imglink", myimglink[i]); manews.set("title", mytitle[i]); var manewspromise = parse.cloud.httprequest({ url: $('img').attr('src'), method: 'get', }).then(function(httpresponse) { var imgfile = new parse.file("photo.jpg", { base64: httpresponse.buffer.tostring('base64') }); manews.set("image", imgfile); // picture return manews.save(); }); promises.push(manewspromise); } return parse.promise.when(promises) }).then(function(bla, result) { // function call when `parse.promise.when(promises)` done, //i can't figure out why take 2 params. response.success("job done"); }, function(error) { response.error(error); }); });
Comments
Post a Comment