2016-01-04 1 views
4

Обычно я объявляем функцию с успехом и не обратные вызовы, как следоватьКак объявить обратный вызов, такой как Parse?

function yoyoyo(param, successCallback, failCallback) { 
    // do something with param 
    // ... 
    if (success) { 
    successCallback('success'); 
    } else { 
    failCallback('fail'); 
    } 
} 

тогда я буду использовать его как этот

yoyoyo('abc', function(success) { 
    console.log(success); 
}, function(err) { 
    console.log(err); 
}); 

НО, когда я смотрю в Разбор Руководство Javascript, они управляют мне нужно использовать такую ​​функцию (т. е. успешность слияния и неудачные обратные вызовы в одном объекте?)

var GameScore = Parse.Object.extend("GameScore"); 
var query = new Parse.Query(GameScore); 
query.get("xWMyZ4YEGZ", { 
    success: function(gameScore) { 
    // The object was retrieved successfully. 
    }, 
    error: function(object, error) { 
    // The object was not retrieved successfully. 
    // error is a Parse.Error with an error code and message. 
    } 
}); 

Как я могу объявить свою функцию с успехом и вызывать обратные вызовы, такие как синтаксический анализ?

+0

рассмотреть возможность возвращения обещание вместо обработки этих обратные вызовы через аргументы. – zzzzBov

ответ

6

Вы бы просто изменить свою функцию, чтобы принимать обратные вызовы ARG (называйте, как хотите), а затем получить доступ обработчиков от этого объекта:

function yoyoyo(param, callbacks) { 
    // do something with param 
    // ... 
    if (success) { 
    callbacks.success('success'); 
    } else { 
    callbacks.error('fail'); 
    } 
} 

, то вы бы назвали его:

yoyoyo('abc', { 
    success: function(status) { 
    }, 
    error: function(status) { 
    } 
}); 

Обратите внимание, что ваш код должен проверять, чтобы переданный объект имел оба метода, прежде чем пытаться их вызвать.

1

Похоже, что вы хотите, это аргумент, который является объектом с success и error функций, как атрибуты

Вы можете объявить функцию как так

function (param, callbacks) { 
    // do something with param 
    // ... 
    if (success) { 
    if(callbacks && callbacks.success) callbacks.success('success'); 
    } else { 
    if(callbacks && callbacks.fail) callbacks.fail('fail'); 
    } 
} 

В качестве примечания, так как я вижу тебя» ve tagged node.js, я бы также рекомендовал вам использовать один error-first callback, который сохраняет ваши функции/apis просто и также следует довольно стандартным соглашениям с узлом.

2

Этот метод принимает объект, содержащий два указателя на функции. Так что это немного похоже на создание объекта, таким образом:

var parameters = {success:function() {}, error:function(){}}; 

Вы можете просто изменить свой метод следующим образом:

function yoyoyo(param, callbacks) { 
    //Add some error checking to check the callbacks is in the right state  
    if (typeof callbacks.success != "undefined" && typeof callbacks.error!= "undefined") 
    { 

     // do something with param 
     // ... 
     if (success) { 
      callbacks.success('success'); 
     } else { 
      callbacks.error('fail'); 
     } 
    } 
    else { 
    throw "callbacks must contain a success and error method"; 
    } 
} 

затем вызвать его:

.yoyoto(param, {success:function() {}, error:function(){}}); 
Смежные вопросы