Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何推荐Cordova文件插件?_Javascript_Cordova_Ecmascript 6_Async Await_Cordova Plugins - Fatal编程技术网

Javascript 如何推荐Cordova文件插件?

Javascript 如何推荐Cordova文件插件?,javascript,cordova,ecmascript-6,async-await,cordova-plugins,Javascript,Cordova,Ecmascript 6,Async Await,Cordova Plugins,我想在apachecordova文件插件中推荐一种方法,但我对“this”有一个问题 最初,我使用的是箭头函数,但当“this”问题开始出现时,我删除了这些函数 /** * @param {Function} funcToPromisify - * @param {*} firstArgForFuncToPromisify - * @returns {Promise<any>} - */ const promisifyFunct

我想在apachecordova文件插件中推荐一种方法,但我对“this”有一个问题

最初,我使用的是箭头函数,但当“this”问题开始出现时,我删除了这些函数

    /**
     * @param {Function} funcToPromisify -
     * @param {*} firstArgForFuncToPromisify -
     * @returns {Promise<any>} -
     */
    const promisifyFunctionOne = function(funcToPromisify, firstArgForFuncToPromisify) {
        return new Promise(function (resolve, reject) {
            funcToPromisify(firstArgForFuncToPromisify, resolve, reject);
        });
    };


    /**
     * @param {Function} funcToPromisify -
     * @returns {Promise<any>} -
     */
    const promisifyFunctionTwo = function(funcToPromisify) {
        return new Promise(function(resolve, reject) {
                funcToPromisify(resolve, reject);
            }
        );
    };


    /**
     * @param {string} pathToFile -
     * @param {Function} urlResolverFunc -
     * @param {object} stateObj -
     * @returns {void} -
     */ 
    const readFile = async function(pathToFile, urlResolverFunc) {
        const fileEntry = await promisifyFunctionOne(urlResolverFunc, pathToFile);  
        console.log(fileEntry); 
        try {
            const fileObj = await promisifyFunctionTwo(fileEntry.file);            
            let reader = new FileReader();        
            reader.onloadend = function() {
                console.log('Successful file read: ' + this.result);            
            };        
            reader.readAsText(fileObj);                    
        }
        catch(error) {        
            console.log(error);
        }
    };

    // Example of how readFile() is being called.
    readFile(pathToFile, window.resolveLocalFileSystemURL);


/**
*@param{Function}funcToPromisify-
*@param{*}firstArgForFuncToPromisify-

*@returns{Promise

在定义
promisify
时,可以使用箭头函数。下面是一个基本示例,它不依赖于上下文(
)-

const promisify=(f)=>
(…a)=>新承诺((res,rej)=>f(…a,res,rej))
常量基本=(a、b、c、成功、失败)=>
c==0
?故障(错误(“c不能为零”))
:成功(a+b+c)
promisify(基本)(1,2,3)。然后(console.log,console.error)
// 6
promisify(基本)(1,2,0)。然后(console.log,console.error)

//错误:“c不能为零”
当您调用
promisifyFunctionTwo(fileEntry.file)
时,
file
会丢失其上下文,
fileEntry
-尝试将
fileEntry.file
替换为
fileEntry.file.bind(fileEntry)
-@user633183,您是正确的。如果您想将注释转换为答案,我将接受它。