2013-05-25 123 views
1

我想寫的時候暫停事件被觸發winjs.application.oncheckpoint事件處理中即一個文本文件狀態的事件處理程序。 我正在寫我的對象作爲JSON文本。 這裏是代碼:寫作文本文件暫停在Windows 8 HTML5

 applicationData.localFolder.createFileAsync("dataFile.txt", Windows.Storage.CreationCollisionOption.replaceExisting).then(function (sampleFile) { 
      var stringData = ""; 
      var i; 
      for (i = 0 ; i < myData.objData.length - 1 ; i++) { 
       stringData += '{"title":"' + myData.objData[i].title + '","challange":"' + myData.objData[i].challange + '"},\n'; 
      } 
      stringData += '{"title":"' + myData.objData[i].title + '","challange":"' + myData.objData[i].challange + '"}'; 
      stringData = "[" + stringData + "]"; 
      return Windows.Storage.FileIO.writeTextAsync(sampleFile, stringData); 
     }).done(function() { }); 

但Windows應用程序寫任何東西到文本文件之前關閉。 我調用了args.setPromise()並將上面的代碼作爲函數參數傳遞,但同樣的問題仍然存在。

PS:我不知道如何以異步方式做是正確的。 請幫忙。

回答

2

像菲爾評論,刪除.done()將修復它。

這是因爲done()不返回任何東西,而鏈的承諾then()回報。這就是沒有任何東西被召喚的原因。

還建議您在應用程序數據發生更改或按一定間隔時間後立即保存,而不是等待掛起事件保存所有內容。暫停事件的時間爲5秒。否則,該應用根據msdn documentation here終止。

「如果一個應用程序不會從暫停事件在5秒內返回,Windows假定該應用程序已停止響應並終止其」

app.oncheckpoint = function (args) { 
app.sessionState.history = nav.history; 

args.setPromise(Windows.Storage.ApplicationData.current.localFolder.createFileAsync 
    ("dataFile.txt", Windows.Storage.CreationCollisionOption.replaceExisting).then(function (sampleFile) { 
     var stringData; 
     // code to set stringData. 

     return Windows.Storage.FileIO.writeTextAsync(sampleFile, stringData); 
    })); 

};

+0

工作很好,謝謝你的幫助。但現在,如果我關閉該應用程序,並再次打開它,則會導致數據丟失。 我想我應該儘快寫入一個文件,只要數據發生變化。 – MShoaib91

+0

是的。將其保存到文件,並顯示用戶進度(進度環)作爲此類UI操作的一部分應該更好。 – Sushil

2

只是event.setPromise(applicationData.localFolder.createFileAsync ...)

然後暫停會等到你的諾言完成。取下.done

+0

它現在工作正常。感謝很多的幫助。 – MShoaib91

+0

你應該upvote然後 – thumbmunkeys