在返回函数的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"); });