用于从回调函数返回值的方法或设计模式
method or design pattern for returning values from callback functions
所以我正在使用回调函数,当然,如果我console.log
返回参数它显示数据,但是我如何将返回数据分配给外部变量。下面的代码是我试图实现的,但它返回未定义。是否存在实现这一目标的设计模式?我试着寻找一个答案,但不确定要寻找什么,或者它甚至是可能的?
var person = (function () {
function message(messages, callback) {
chrome.runtime.sendMessage(messages, function(response) {
callback(response);
});
}
return {
male: message
};
})();
var me = person.male({
mydata: {
firstname: 'john',
lastname: 'doe'
}
}, function (person) {
// of course this works
console.log(person);
return person;
});
// does not work
console.log(me);
在你的特定代码中,你已经证明了你的回调是由person.male()
方法调用的,但是它完全取决于person.male()
函数的设计,它对该回调的返回值做了什么。
如果person.male()
异步调用回调(例如将来的某个时候),那么它就没有机会从person.male()
返回您的返回值。如果一切都是同步的,那么回调的返回值只有在person.male()
被写入时才会从person.male()
返回。既然它没有这样做,那么它显然不是这样写的,而且person.male()
代码之外的任何代码都不会改变它的工作方式。
现在,您已经显示了person.male()
的代码,我们可以看到回调是由chrome.runtime.sendMessage()
函数调用的,因此回调的返回值返回到该函数中。person.male()
不是写来做任何与回调的返回值有关的事情。
并且,根据chrome.runtime.sendMessage()
的目的判断,我会说它可能异步调用回调,这意味着它是在person.male()
已经返回之后调用的,所以没有办法从person.male()
返回的回调中获得返回值,因为person.male()
甚至在回调调用之前返回。
作为侧边栏,您可以将稍微复杂的person
定义替换为更容易遵循的代码:
var person = {
male: function(messages, callback) {
chrome.runtime.sendMessage(messages, callback);
}
};
回调函数可以直接设置"outside"变量。但是,如果回调是异步调用的,那么在此之前'me'将是未定义的:
var me;
person.male({
mydata: {
firstname: 'john',
lastname: 'doe'
}
}, function (person) {
console.log(person);
me = person;
});
// 'me' will be undefined until the callback is called.
console.log(me);
这是异步代码,所以在得到函数的结果之前不要延迟主线程。在您的示例中,有必要访问console.log(me)
的值。
- 用于操纵DOM API的Javascript设计模式
- 用于多个选项卡和模块化的knockoutjs设计模式
- 自动化设计模式c++
- jQuery自动完成标记新的标签设计模式
- 有没有一种方法可以在设计模式下将ng模型或工厂绑定到iframe
- Javascript MVVM 设计模式 - 如何跟踪脏状态以及谁应该做 Ajaxing
- 包含 2 个或更多对象的页面上的 JavaScript 设计模式
- 在 Node 中.js释放 zalgo 的设计模式为什么异步路径是一致的
- Django设计模式-在加载时填充客户端JavaScript变量的方法
- Javascript策略设计模式问题
- 用于处理带有promise的外部接口中的参数的设计模式
- angularjs设计模式和从服务器获取数据的最佳实践
- JavaScript设计模式的建议
- 这种设计模式什么时候才能打破
- 它是什么样的Javascript设计模式/方法
- node.js导出方法facade设计模式
- javascript设计模式-通过公共方法回调
- 从模块加载特定的方法.设计模式
- Javascript模块化设计模式——哪个更好:自调用函数,还是对象文字方法
- 用于从回调函数返回值的方法或设计模式