在返回函数的variables之前如何等待一个承诺?
我仍然在努力承诺,但由于这里的社区取得了一些进展。
我有一个简单的JS函数查询一个parsing数据库。 它应该返回结果数组,但显然由于查询的asynchronous性质(因此承诺),函数返回结果之前,留下一个未定义的数组。
为了使这个function等待承诺的结果,我需要做些什么?
这是我的代码:
function resultsByName(name) { var Card = Parse.Object.extend("Card"); var query = new Parse.Query(Card); query.equalTo("name", name.toString()); var resultsArray = []; var promise = query.find({ success: function(results) { // results is an array of Parse.Object. console.log(results); //resultsArray = results; return results; }, error: function(error) { // error is an instance of Parse.Error. console.log("Error"); } }); }
不是返回一个resultsArray
而是返回一个结果数组的承诺,然后返callback用站点上的承诺 – 这样做resultsArray
调用者知道函数正在执行asynchronousI / O。 JavaScript中的编码并发是基于此 – 您可能想要阅读这个问题来获得更广泛的想法:
function resultsByName(name) { var Card = Parse.Object.extend("Card"); var query = new Parse.Query(Card); query.equalTo("name", name.toString()); var resultsArray = []; return query.find({}); } // later resultsByName("Some Name").then(function(results){ // access results here by chaining to the returned promise });
你可以在Parse自己的博客文章中看到更多使用parse promise的例子。
你不能让这个function等待。
而是在函数结束时返回promise,然后调用函数可以使用promise来获得服务器响应。
var promise = query.find(); return promise; //Or return query.find();
你实际上并没有在这里使用promise。 parsing让你使用callback或承诺; 你的select。
要使用承诺,请执行以下操作:
query.find().then(function() { console.log("success!"); }, function() { console.log("error"); });
现在,在promise完成之后执行东西,你可以在then()
调用中的promisecallback中执行它。 到目前为止,这将与常规callback完全相同。
实际上,很好地利用承诺就是当你链接它们时,就像这样:
query.find().then(function() { console.log("success!"); return new Parse.Query(Obj).get("sOmE_oBjEcT"); }, function() { console.log("error"); }).then(function() { console.log("success on second callback!"); }, function() { console.log("error on second callback"); });