我已经阅读了大量的示例和教程,虽然我知道解决方案可能很简单但我无法让我的脑子缠绕它。这里的任何帮助都会非常感激。
我在Node中有两个函数。 functionA()不带参数,并返回英文字符串。第二个,functionB(英语)从funcitonA()返回英文字符串,并将其翻译成另一种语言。
我认为回调是最好的解决方案,但对于我的生活,我无法弄清楚最佳结构是什么。
提前感谢。
答案 0 :(得分:0)
我有点不清楚你要做什么(你可能会过分思考)但是请考虑以下内容,这些内容说明了这些功能被调用和调用的四种方式。作为澄清,我应该注意到我没有编写节点样式的回调,它总是采用回调形式(错误,结果),如果没有错误,err的计算结果为false。你不必以这种方式编写自己的回调,尽管我自己也倾向于这样做。
// your 'functionA'
function getMessage(){
return 'Hello';
};
// your 'functionB'
function francofy(str) {
var result;
switch(str){
case 'Hello':
result = 'Bon jour'; // 'Allo' might be better choice, but let's stick to node
break;
default:
throw new Error('My Vocabulary is too limited');
}
return result;
};
// the most straightforward use of these functions
console.log('Synch message, synch translate', francofy(getMessage()));
// what if the translation is asynch - for example, you're calling off to an API
// let's simulate the API delay with setTimeout
function contemplateTranslation(str,cb) {
setTimeout(function(){
var result = francofy(str);
cb(result);
},1000);
};
contemplateTranslation(getMessage(), function(translated){
console.log('Synch Message, Asynch Translate: ' + translated);
});
// what if the message is async?
function getDelayedMessage(cb) {
setTimeout(function(){
cb('Hello');
},1000);
};
getDelayedMessage(function(msg){
console.log('Asynch Message, Synch Translate', francofy(msg));
});
// what if you need to call an asynchronous API to get your message and then
// call another asynchronous API to translate it?
getDelayedMessage(function(msg){
contemplateTranslation(msg, function(translated){
console.log("My God, it's full of callbacks", translated);
});
});
另请注意,还有其他方法可以处理异步操作,例如使用promises(我更喜欢Q promise库,但还有其他选项)。但是,在覆盖抽象之前,可能值得理解核心行为。