0

Я пишу следующую функцию, и мне нужно вернуть myJsonString. Когда я выполняю функцию, он запускает асинхронно. Для этого синхронно Я использовал when(), then(), но все равно ничего не возвращает.Возврат в функции обратного вызова в js

Просьба предложить способ.

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

You не возвращайте вещи в AJAX, вы делаете вещи внутри обратных вызовов. Попытка сделать синхронные запросы AJAX не является хорошим советом, зачем использовать AJAX в первую очередь? Читайте здесь для получения дополнительной информации http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call – elclanrs

+0

Я не использую AJAX. Я упомянул, что использую Javascript – xTMNTxRaphaelx

+0

it должен работать, вы получаете сообщение об ошибке на консоли? также попробуйте поместить в него инструкции console.log(), чтобы увидеть, что происходит. –

ответ

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); }); 
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; 
    }) 
} 
+0

Мне нужно что-то вроде вышеупомянутого 3-го кода, но возврат здесь не работает. – xTMNTxRaphaelx

+0

Что значит не работает? –

+0

Когда я запускаю третий код, он не возвращает желаемое значение. Он возвращает всю совокупность объектов, как показано на рисунке. – xTMNTxRaphaelx

Смежные вопросы