Что означает "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
массив). Для получения дополнительной информации см. Описания аргументов. По умолчанию, если не указано, пустой массив, [].