Что означает "cb" в обратной петле?

Я пытаюсь изучить петлю, но я не совсем понимаю, что означает "cb" в вызове функции. Я прочитал это В документации по петле, что означает переменная 'cb'? и у меня есть базовое понимание callback в nodejs, но я просто не понимаю cb в loopback. Например, http://docs.strongloop.com/display/public/LB/Remote+methods.

module.exports = function(Person){

    Person.greet = function(msg, cb) {
      cb(null, 'Greetings... ' + msg);
    }

    Person.remoteMethod(
        'greet',  
        {
          accepts: {arg: 'msg', type: 'string'},
          returns: {arg: 'greeting', type: 'string'}
        }
    ); 
};

Что означает этот cb? Как мы можем знать, что он принимает два параметра, нуль и строку? Надеюсь, кто-нибудь может помочь.

3 ответа

Решение

Итак, у вас есть функция Async Person.greet который вы будете называть так:

Person.greet('hello', function(err){
    ...
});

Обратите внимание, что после 'hello' второй аргумент был передан, и это на самом деле функция. Он также может быть определен снаружи с именем и передан следующим образом:

function callback(err){
    ...
}
Person.greet('hello', callback);

Теперь это выглядит именно так, как Person.greet было определено:

Person.greet = function(msg, cb) {
  cb(null, 'Greetings... ' + msg);
}

Разница здесь только в том, что в определении используется другое имя: cb, Он мог бы использовать любое имя с тех пор cb это просто аргумент. Но обычно "cb", "done" или "next" используются в качестве стандартной практики.

Глядя на ответы, мне кажется, что только один из двух вопросов когда-либо был дан ответ.


Вопрос 1: Что означает этот cb?

На это уже отвечали, что это сокращение для функции обратного вызова.


Вопрос 2: Как мы можем знать, что он принимает два параметра, нуль и строку?

Вы определяете это в параметре возврата вашего удаленного метода, который делает следующее в соответствии с документами:

Описывает аргументы обратного вызова удаленного метода; Смотрите описание аргументов. Аргумент err принят; не уточняйте

Так что, если мы посмотрим на ваш пример

Person.remoteMethod(
    'greet',  
    {
      accepts: {arg: 'msg', type: 'string'},
      returns: {arg: 'greeting', type: 'string'}
    }
); 

Вы определили здесь, что параметры обратного вызова будут

callback(err, greeting: string)

Давайте рассмотрим еще один пример из документов:

    MyModel.remoteMethod('download', {
        isStatic: true,
        returns: [
            { arg: 'body', type: 'file', root: true },
            { arg: 'Content-Type', type: 'string', http: { target: 'header' } },
        ],
    });

Для этого примера обратный вызов будет

callback(err, body: file, Content-Type: string)

и использование так

cb(null, stream, 'application/octet-stream');

Я только что натолкнулся на тот же вопрос, и после пары часов разочарования я нашел официальный ответ.

https://docs.strongloop.com/display/public/LB/Remote+methods

ОПЦИЯ ПРИНИМАЕТ:

Определяет аргументы, которые принимает удаленный метод. Эти аргументы отображаются на статический метод, который вы определяете. В приведенном выше примере вы можете увидеть подпись функции: Person.greet(name, age, callback)... name это первый аргумент, age является вторым аргументом, и LoopBack автоматически обеспечивает обратный вызов (не указывайте его в accepts массив). Для получения дополнительной информации см. Описания аргументов. По умолчанию, если не указано, пустой массив, [].

Другие вопросы по тегам