2013-12-15 4 views
0

У меня проблема с возвратом массива в обещании Winjs, и я не знаю, что не так с моим кодом. Когда я создаю обещание и делаю .done или. Then мое обещание ничего не делает.WinJS return in prom array

Код:

function getSth(array) { 

    return new WinJS.Promise(function() { 
     var dbPath = Windows.Storage.ApplicationData.current.localFolder.path + '\\_db.sqlite'; 

     var i = 0; 
     SQLite3JS.openAsync(dbPath) 
       .then(function (db) { 
        console.log('DB opened'); 
        return db.eachAsync('SELECT * FROM sthh;', function (row) { 
         array[i++] = row.sth; 
         console.log('Get a ' + row.sth); 
        }); 
       }) 
      .then(function (db) { 
       console.log('close the db'); 
       db.close(); 
      }).then(function() { 
       return array; 
      }); 
     return array; 
    }) 
} 

И в другом файле я просто сделать что-то вроде этого:

var array = []; 
      var z = getSth(array).then(function() { 
       console.log("AAA"); 
for (var i = 0; i < array.length; console.log("#" + array[i]), i++); 
      }); 

Я буду очень благодарен за любые предложения.

+1

Um, что это не так, как вы создаете обещание. Параметр функции для 'new WinJS.Promise' принимает три параметра, традиционно называемых' c', 'e' и' p'. Вы вызываете 'c (result)', когда вы произвели результат. –

ответ

2

Я предполагаю, что вы не хотите немедленно возвращаться и вместо этого хотите вернуть массив, когда он будет заполнен элементами?

Я думаю, что вы хотите, чтобы написать код, который больше, как это:

function getSth(array) { 

    var dbPath = Windows.Storage.ApplicationData.current.localFolder.path + '\\_db.sqlite'; 

    var i = 0; 
    return SQLite3JS.openAsync(dbPath) 
      .then(function (db) { 
       console.log('DB opened'); 
       return db.eachAsync('SELECT * FROM sthh;', function (row) { 
        array[i++] = row.sth; 
        console.log('Get a ' + row.sth); 
       }); 
      }) 
     .then(function (db) { 
      console.log('close the db'); 
      db.close(); 
     }).then(function() { 
      return array; 
     }); 
} 
+0

спасибо :) Это очень очевидно, иногда я не думаю;) Спасибо! – pkruk