PhoneGap 检查文件是不是存在

Posted

技术标签:

【中文标题】PhoneGap 检查文件是不是存在【英文标题】:PhoneGap check if file existsPhoneGap 检查文件是否存在 【发布时间】:2015-09-01 10:29:44 【问题描述】:

我想检查文件是否存在,如果不存在,请下载它。我在this SO question 和this blog post 中尝试过建议的解决方案

但是这些解决方案都不适合我。这是我基于 SO 问题的代码:

 window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) 
                console.log("gotFS");
                getFolder(fileSystem, video.folderName, function(folder) 
                    console.log("Got folder");
                    var filePath = folder.toURL() + "\/" + "videotest.mp4";

                    fileSystem.root.getFile(filePath,  create: false , playVideo(filePath, true), transferFile(video.uri, filePath));


                , function() 
                    console.log("failed to get folder");
                );

            ,
            function() 
                console.log("failed to get filesystem");
            );

播放视频功能如下:

 function playVideo(uri, hasBeenDownloaded) 

   console.log("was video dowloaded already", hasBeenDownloaded);
    var player = document.getElementById("videoPlayer");
    var source = document.createElement("source");

    source.src = uri;
    source.type = "video/mp4";

    player.appendChild(source);
    player.load();

这里是 transferFile 函数:

function transferFile(uri, filePath) 
       var transfer = new FileTransfer();
       transfer.download(
           uri,
           filePath,
           function (entry) 
               var targetPath = entry.toURL();

               console.log("target path je", targetPath);
               document.getElementById("result").innerhtml = "File saved to: " + targetPath;
               playVideo(targetPath, false);

           ,
           function (error) 
               document.getElementById("result").innerHTML = "An error has occurred: Code = " + error.code;
               console.log("download error source " + error.source);
               console.log("download error target " + error.target);
               console.log("upload error code" + error.code);
           
           );
   

无论文件是否存在,playVideo 和 transferFile 都会被调用。

例如,如果文件已经存在,首先只调用 playVideo 并在控制台中记录:

was video dowloaded already: true

一段时间后,我看到调用了 transferFile 函数,下载文件时它会调用 playVideo 并且在控制台中我可以看到:

was video dowloaded already: false

那么为什么会这样呢?

附言

与博文中建议的代码问题完全相同,即两个函数都被调用。

【问题讨论】:

【参考方案1】:

您的代码将 called 函数作为回调传递,而不是函数本身。让我举个例子吧。想象一下,你有函数 Foo。它要求您传递 2 个回调函数 - 一个用于成功,一个用于失败。你可以这样做:

function good()  alert('good'); ;
function bad()  alert('bad'); ;

foo(good, bad);

但是,这就是你所做的:

foo(good(), bad());

这就是为什么你们都被召唤了。你需要改变:

 fileSystem.root.getFile(filePath,  create: false , playVideo(filePath, true), transferFile(video.uri, filePath));

fileSystem.root.getFile(filePath,  create: false , playVideo, transferFile);

这意味着您需要访问的值不是作为参数,而是作为常规变量。

【讨论】:

我这样做真的很愚蠢,感谢您的回复,这解决了我的问题:)

以上是关于PhoneGap 检查文件是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

检查PhoneGap的记录是不是存在SQL

如何使用phonegap检测android中的来电号码

iOS 构建匹配配置文件错误 - phonegap

检查用户是不是存在[重复]

一键构建PhoneGap构建到Android

为啥 PhoneGap 总是显示默认的启动画面?