Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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
breeze:默认错误处理程序_Breeze - Fatal编程技术网

breeze:默认错误处理程序

breeze:默认错误处理程序,breeze,Breeze,有没有办法为使用breeze进行的所有调用提供默认错误处理程序 现在,我必须为breeze.EntityManager.fetchEntityByKey返回的每个承诺添加.fail(onFail)/breeze.EntityQuery.execute/

有没有办法为使用breeze进行的所有调用提供默认错误处理程序

现在,我必须为breeze.EntityManager.fetchEntityByKey返回的每个承诺添加.fail(onFail)/
breeze.EntityQuery.execute
/


如果我可以为所有调用设置默认错误处理程序,并覆盖特定调用的默认处理程序,那将是最好的。

我开始留下一堆注释,并决定将其作为一个答案。您始终可以这样做以减少所需的代码并提高可重用性-

var thisQuery = breeze.entityQuery.from('Whatever').where('pwkad', '==', 'awesome');
queryRunner(thisQuery);

function queryRunner(query) {
    query.execute().fail(queryFailed);
};

function queryFailed(error) {
    console.log(error.message);
};
它在使用“queryRunner”时共享一个已定义的queryFailed方法。然后,您可以将所有与类型无关的可重用代码放在其中。更进一步,您还可以构建一个基本查询,所有其他查询都“继承”(我松散地使用它)到该查询,使用参数构建查询,然后只维护一个代码库。我强烈建议您这样做(我在所有的Breeze.js生产应用程序中都使用它),因为它迫使您在前端和API代码上都遵循约定。我不会透露我的秘密酱汁到底是什么样子的,但这里有一个简单的例子-

// All is pseudo code
function getEntityById (manager, type, resourcePath, forceRemote, idProp, idValue, params) {
    if (!manager) { throw "Must pass in a manager"; }

    var query = breeze.entityQuery.from(resourcePath).toType(type);

    if (!forceRemote) {
        // Put your code here to get from cache
        var entity = breeze.fetchEntityByKey();
        if (entity) {
            return entity;
        }
    }

    if (params) {
        // Pass in a valid params object and set it to whatever
        query.withParameters(params);
    }

    if (idValue && idProp) {
        query.where(idProp, '==', idValue);
    }

    query.execute().fail(queryFailed);

    function queryFailed(error) {
        console.log(error);
    }
}
可以从需要通过Id“获取”实体的任何位置调用-

var manager = new breeze.entityManager();

var hamburger = getEntityById(manager, 'Hamburger', 'Hamburgers', true, 'id', 1);

使用此方法,您可以编写一个breeze查询并在任何地方调用它,只要您正确给出参数,就可以节省大量的时间和调试。

我开始留下一堆注释,并决定将其作为一个答案。您始终可以这样做以减少所需的代码并提高可重用性-

var thisQuery = breeze.entityQuery.from('Whatever').where('pwkad', '==', 'awesome');
queryRunner(thisQuery);

function queryRunner(query) {
    query.execute().fail(queryFailed);
};

function queryFailed(error) {
    console.log(error.message);
};
它在使用“queryRunner”时共享一个已定义的queryFailed方法。然后,您可以将所有与类型无关的可重用代码放在其中。更进一步,您还可以构建一个基本查询,所有其他查询都“继承”(我松散地使用它)到该查询,使用参数构建查询,然后只维护一个代码库。我强烈建议您这样做(我在所有的Breeze.js生产应用程序中都使用它),因为它迫使您在前端和API代码上都遵循约定。我不会透露我的秘密酱汁到底是什么样子的,但这里有一个简单的例子-

// All is pseudo code
function getEntityById (manager, type, resourcePath, forceRemote, idProp, idValue, params) {
    if (!manager) { throw "Must pass in a manager"; }

    var query = breeze.entityQuery.from(resourcePath).toType(type);

    if (!forceRemote) {
        // Put your code here to get from cache
        var entity = breeze.fetchEntityByKey();
        if (entity) {
            return entity;
        }
    }

    if (params) {
        // Pass in a valid params object and set it to whatever
        query.withParameters(params);
    }

    if (idValue && idProp) {
        query.where(idProp, '==', idValue);
    }

    query.execute().fail(queryFailed);

    function queryFailed(error) {
        console.log(error);
    }
}
可以从需要通过Id“获取”实体的任何位置调用-

var manager = new breeze.entityManager();

var hamburger = getEntityById(manager, 'Hamburger', 'Hamburgers', true, 'id', 1);

使用此方法,您可以编写一个breeze查询,并在任何地方调用它,从而节省大量的时间和调试,前提是您正确地给出了参数。

breeze允许在应用程序启动时设置错误处理程序:

var ajaxAdapter = breeze.config.getAdapterInstance("ajax");

ajaxAdapter.requestInterceptor = function (requestInfo) {
    // this method is called for every request made with breeze ajax adapter
    // all callbacks are in zConfig
    var
        successHandler = requestInfo.zConfig.success,
        errorHandler = requestInfo.zConfig.error || handleBadRequest,
        finalHandler = requestInfo.zConfig.finally; // final handler for calls, made directly with adapter

    if (finalHandler) {
        requestInfo.zConfig.success = function (response) {
            if(successHandler) {
                successHandler(response);
            }
            finalHandler(response);
        }
    }

    requestInfo.zConfig.error = function (response) {            
        switch (response.status) {
        case 400:
            // call error handler only for 'BadRequest'
            errorHandler(parseErrors(response));
            break;
        case 401:
            handleUnauthorizedRequest(response);
            break;
        default:
            handleServerOrUnrecognizedError(response);
            break;
        }
        if (finalHandler) {
            finalHandler(response);
        }
    };
};

breeze允许在应用程序启动时设置错误处理程序:

var ajaxAdapter = breeze.config.getAdapterInstance("ajax");

ajaxAdapter.requestInterceptor = function (requestInfo) {
    // this method is called for every request made with breeze ajax adapter
    // all callbacks are in zConfig
    var
        successHandler = requestInfo.zConfig.success,
        errorHandler = requestInfo.zConfig.error || handleBadRequest,
        finalHandler = requestInfo.zConfig.finally; // final handler for calls, made directly with adapter

    if (finalHandler) {
        requestInfo.zConfig.success = function (response) {
            if(successHandler) {
                successHandler(response);
            }
            finalHandler(response);
        }
    }

    requestInfo.zConfig.error = function (response) {            
        switch (response.status) {
        case 400:
            // call error handler only for 'BadRequest'
            errorHandler(parseErrors(response));
            break;
        case 401:
            handleUnauthorizedRequest(response);
            break;
        default:
            handleServerOrUnrecognizedError(response);
            break;
        }
        if (finalHandler) {
            finalHandler(response);
        }
    };
};

save fail逻辑应始终具有不同的fail方法IMHO,但对于其他方法,如果将它们分组为不可知类型的泛型调用,则所有查询都可以通过相同的调用,减少查询逻辑代码和失败逻辑来详细说明这一点,但进一步说,您还可以使用基本函数来生成查询,然后在失败逻辑所在的位置对其进行扩展,以便只定义一次。对于较新的breeze dev,这可能更容易。保存失败逻辑应始终具有不同的失败方法IMHO,但对于其他类型,如果将它们分组为不可知类型的通用调用,则所有查询都可以通过相同的调用,减少查询逻辑代码和失败逻辑来详细说明这一点,但进一步说,您还可以使用基本函数来生成查询,然后在失败逻辑所在的位置对其进行扩展,以便只定义一次。对于较新的breeze开发人员来说,这可能更容易