Ответ 1
cb
в контексте, который вы описываете, так это то, как функция обратного вызова ваниля передается в (как правило) асинхронную функцию, которая является общим шаблоном в node.js(иногда это обозначается следующим образом, но вы можете назовите его bananas
, если вы этого желаете - это просто аргумент).
Обычно первый аргумент - это объект error
(часто false - если все идет по плану), а последующие аргументы - это данные определенной формы.
Например:
function myAsyncFunction(arg1, arg2, cb) {
// async things
cb(false, { data: 123 });
}
используя эту функцию:
myAsyncFunction(10, 99, function onComplete(error, data) {
if (!error) {
// hooray, everything went as planned
} else {
// disaster - retry / respond with an error etc
}
});
Promises являются альтернативой этому шаблону проектирования, в котором вы вернете объект Promise из myAsyncFunction
Например:
function myAsyncFunction2(arg1, arg2) {
return new Promise(function resolution(resolve, reject, {
// async things
resolve({ data: 123 });
});
}
используя эту функцию:
myAsyncFunction2(10, 99)
.then(function onSuccess(data) {
// success - send a 200 code etc
})
.catch(function onError(error) {
// oh noes - 500
});
Они в основном то же самое, просто написано немного по-другому. Promises не поддерживаются особенно широко в родной форме, но если вы переносите транспилер (я бы рекомендовал babel) во время шага сборки, они должны выполняться достаточно надежно в браузере.
Обратные вызовы всегда будут работать в браузере без shimming/transpilation.