0

要求是我在需要返回结果的 JavaScript 函数中使用了名为 Q.all 的 Q.js 功能,前提是 Q.all 成功完成。

我的目标是返回一个具有两个属性的对象,分别称为 wrongsize 和 OKsize。这两个属性都是 javascript 数组。

问题是我不确定如何将 Q.defer 函数与 Q.all 包含在同一个函数中。

function filterNonConformingPageSize(files) {

    var addToWhichGlobalVariable = "pageSizesOfNewFiles";

    promises = [];
    for (var i=0; i<files.length; i++) {
        promises.push(
            getSizeSettingsFromPage(files[i], addToWhichGlobalVariable, calculateRatio)
        );
    }

    // *** sort out the files after all promises have been resolved
    var resultObj = Q.all(promises).then(function() {
        var test = new Object();
        var filesWithOkaySize = new Array();
        var filesWithWrongSize = new Array();   

        for (var i=0; i<files.length; i++) {
            if (pageSizesOfNewFiles[i].size == majorityPageSize) {
                filesWithOkaySize.push(files[i]);
            } else {
                filesWithWrongSize.push(files[i].name);
            }
        }
        test['wrongsize'] = filesWithWrongSize;
        test['okaysize'] = filesWithOkaySize;

        return test;
    });

    return resultObj;

}
4

1 回答 1

0

注意@TODO 部分。

    /** iteratively calculate pagesize of the new incoming files **/
function filterNonConformingPageSize(files) {
    // @TODO Create a Deferred
    var deferred = Q.defer();

    var addToWhichGlobalVariable = "pageSizesOfNewFiles";

    promises = [];
    for (var i=0; i<files.length; i++) {
        promises.push(
            getSizeSettingsFromPage(files[i], addToWhichGlobalVariable, calculateRatio)
        );
    }


    // *** sort out the files after all promises have been resolved
    Q.all(promises).then(function() {
        var test = new Object();    
        var filesWithOkaySize = new Array();
        var filesWithWrongSize = new Array();   

        for (var i=0; i<files.length; i++) {
            var filename = files[i].name;
            var newFileSize = pageSizesOfNewFiles.getByKey(filename);
            if (newFileSize.size == majorityPageSize) {
                console.log(filename + "is right size");
                console.log(newFileSize.size);
                filesWithOkaySize.push(files[i]);
            } else {
                console.log(filename + "is wrong size");
                filesWithWrongSize.push(files[i]);
            }
        }
        test['wrongsize'] = filesWithWrongSize;
        test['okaysize'] = filesWithOkaySize;
    // @TODO add the resolve        
        deferred.resolve(test); 
    });
    // @TODO return the promise part. 
    return deferred.promise;

}

当你调用函数时,这样做

 filterNonConformingPageSize(filterDupeNameResult['okaynames']).then(function(result){
 // result will be the expected result
     // at the end of running filterNonConformingPageSize
 });
于 2012-11-29T07:10:11.810 回答