【问题标题】:Asynchronous Javascript in a synchronous manner (esp) in PhoneGapPhoneGap中以同步方式(esp)的异步Javascript
【发布时间】:2013-03-27 03:45:30
【问题描述】:

我对在 Phonegap 中使用的 JS 异步编程有点陌生。我有一个函数调用

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0,onFSWin , onFSFail);

var onFSWin = function(fileSystem) {        
  fileSystem.root.getDirectory("Icenium Demo", {create: false, exclusive: false}, onGetDirectoryWin, onGetDirectoryFail);
}

此回调有效,但当有 4-5 个调用链时,它开始变得非常混乱。这个我试过了

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, 
function(filesystem){
        fileSystem.root.getDirectory("Icenium Demo", {create: false, exclusive: false},    onGetDirectoryWin, onGetDirectoryFail); 
       }, onFSFail);

但它认为文件系统是未定义的,所以有几个问题:

  1. 错误是Phonegap不接受匿名函数这种方式吗
  2. 我正在查看 Jquery 中的承诺和回调,但我正在努力让我了解它。谁能给我一个使用 defer 对象的例子。我见过使用管道的示例,但已弃用。

【问题讨论】:

  • stackoverflow.com/questions/15819651/progress-on-when-call/… 看看,我几个小时前问过这个。
  • 回调令人沮丧,对吧?在 F# 中,回调链非常简单 - 您可以使用 F# Async。它看起来像同步代码,但不是。 F# Async 使用 WebSharper 编译为 JavaScript,PhoneGap 支持也即将到来。
  • 也许这只是变量/函数范围的问题?

标签: javascript jquery cordova asynchronous promise


【解决方案1】:

您好,我认为延迟模式不适用于 Phonegap,它不会返回延迟对象。然而,该视频在解释承诺模式方面非常有用。这是我为它的价值而工作的一些基本代码

var step1 = $.getJSON('/test1.txt', function (data) {
return data;
});



var step2 = $.getJSON('/test2.txt', function (data) {
return data;
});

var processStep1 = function (data) {
var d1 = data.one;
alert(d1);
return $.getJSON('/test2.txt', function (data) {
    return data;
});

}

var processStep2 = function (data) {
$.each(data, function (key, val) {
    alert(val);
});
}

step1.then(processStep1).then(processStep2);

【讨论】:

  • 那些function(data){ return data; }) 位完全是多余的。
猜你喜欢
  • 1970-01-01
  • 2013-05-14
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多