Node中的cb()是什么?

Pos*_*Guy 19 node.js

人们从哪里获得cb(),这是一个Node事物还是vanilla事物?

例如:

使用Promises,Generators和其他方法管理Node.js回调地狱

他们使用cb()来猜测回调并在某些情况下返回错误或值或两者,具体取决于回调函数sig是什么?

Jos*_*hua 39

cb在你描述它的上下文中是如何将一个vanilla回调函数传递给一个(通常)异步函数,这是node.js中的一个常见模式(它有时被标记为next,但你可以调用它,bananas如果你愿意的话 - 它是只是一个论点).

通常,第一个参数是一个error对象(通常是假的 - 如果一切都按计划进行),后续参数是某种形式的数据.

例如:

function myAsyncFunction(arg1, arg2, cb) {
    // async things
    cb(false, { data: 123 });
}
Run Code Online (Sandbox Code Playgroud)

然后使用此功能:

myAsyncFunction(10, 99, function onComplete(error, data) {
    if (!error) {
        // hooray, everything went as planned
    } else {
        // disaster - retry / respond with an error etc
    }
});
Run Code Online (Sandbox Code Playgroud)

Promise是此设计模式的替代方案,您可以从中返回Promise对象myAsyncFunction

例如:

function myAsyncFunction2(arg1, arg2) {
    return new Promise(function resolution(resolve, reject, {
        // async things
        resolve({ data: 123 });
    });
}
Run Code Online (Sandbox Code Playgroud)

然后使用此功能:

myAsyncFunction2(10, 99)
    .then(function onSuccess(data) {
        // success - send a 200 code etc
    })
    .catch(function onError(error) {
        // oh noes - 500
    });
Run Code Online (Sandbox Code Playgroud)

它们基本上是一回事,只是略有不同.Prom 不是特别广泛地以原生形式支持,但如果在构建步骤中通过转换器(我建议使用babel),它们也应该在浏览器中足够可靠地执行.

回调将始终在没有填充/转换的浏览器中工作.

  • 那么“cb”只是回调的缩写,可以用任何其他变量名替换吗? (2认同)