0

我正在编写以下函数,我需要返回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;
      });
    }
4

2 回答 2

1

您不能将异步转为同步。您将无法执行以下操作:

var config = getConfig()

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

你需要使用承诺,比如

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

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

function getConfig() {
   return offlinedb.configuration.toArray()
   .then(function(documents) {
      // this part is sync
      // process your documents
      return result;
   })
}
于 2013-11-13T09:15:20.043 回答
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); });
于 2013-11-13T07:45:28.570 回答