返回js中的回调函数

时间:2013-11-13 07:40:06

标签: javascript callback jquery-callback jaydata asynccallback

我正在编写以下函数,我需要返回myJsonString。 当我执行该功能时,它以异步运行。 为了使其同步,我使用了when()then()但仍然没有返回任何内容。

请建议一种方式。

var myJsonString;
var items = [];

function getConfig() {
    $.when(offlinedb.configuration.toArray(function (documents) {
        $.each(documents, function (i, aaa) {
            var obj = {};
            var temp = aaa.Property;
            var tempObj = aaa.Value;
            obj[temp] = tempObj;
            items.push(obj);
        });
        myJsonString = JSON.stringify(items);
    })).then(function (y, yy) {
        console.log(myJsonString);
        // return does not work here..
    });
    return myJsonString;
} 

编辑我的代码:

var items = [];
var myJsonString;
function getConfig(){
    return offlinedb.configuration.toArray()
   .then(function(documents) {
             $.each(documents,function (i,aaa){
                var obj={};
                var temp=aaa.Property;
                var tempObj= aaa.Value;
                obj[temp]=tempObj;
                items.push(obj);
           });
          myJsonString = JSON.stringify(items);
          return myJsonString;
      });
    }

2 个答案:

答案 0 :(得分:1)

您无法将异步转为同步。你将无法做到这样的事情:

var config = getConfig()

function getConfig() {
     // call async functions
     return something;
}

你需要使用承诺,比如

getConfig()
.then(function(config) {
     // you can use config here
})

并在getConfig函数中创建一个promise链:

function getConfig() {
   return offlinedb.configuration.toArray()
   .then(function(documents) {
      // this part is sync
      // process your documents
      return result;
   })
}

答案 1 :(得分:0)

$.whenthen似乎是异步的,这意味着您需要处理回调,可能作为函数的参数。例如:

function getConfig(callback){
    $.when(offlinedb.configuration.toArray(function (documents) {
             $.each(documents,function (i,aaa){
                var obj={};
                var temp=aaa.Property;
                var tempObj= aaa.Value;
                obj[temp]=tempObj;
                items.push(obj);
           });
          myJsonString = JSON.stringify(items);
        })).then(function (y,yy){
            callback(myJsonString)
      });
}
// example: getConfig(function(result) { console.log(result); });