我正在编写以下函数,我需要返回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;
});
}
答案 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)
$.when
和then
似乎是异步的,这意味着您需要处理回调,可能作为函数的参数。例如:
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); });