例如我有
function passConcatenatedStringBack(){
var i,concatString;
for(i=0; i<arguments.length;i++){
concatString = arguments[i];
}
callback(concatString); // this will be error since callback is undefined
}
如何在节点回调样式中实现此功能?不使用承诺
答案 0 :(得分:3)
function passConcatenatedStringBack(){
var i,concatString, error;
var args = Array.prototype.slice.call(arguments); //convert to Array as Kenichi Shibata pointed out
var callback = args.pop(); //get the callback function and remove it from the arguments.
for(i=0; i< args.length;i++){
concatString += args[i];
}
callback(error, concatString);
}
只需取最后一个参数并将其用作回调。 您仍应实施验证,以检查用户是否提供了有效的回调。
答案 1 :(得分:1)
我可能会认为第一个参数总是回调。
这样我会检查第一个参数是否为类型函数,如果是,则将其用作回调并使用其余作为函数的参数。
那么你也可以,检查最后一个参数是否是回调。
答案 2 :(得分:1)
常见的方法是检查最后一个参数是否为函数:
function fn() {
var cb = arguments.pop();
if (typeof cb !== 'function') {
throw new Error('No callback provided!');
}
// do your stuff and then callback
cb(null, result);
}
答案 3 :(得分:0)
你有没有尝试过:
function passConcatenatedStringBack(callback){}
passConcatenatedStringBack(function (args1){ // callback stuff });