我应该返回回调还是直接运行它
Should I return the callback or just run it?
我目前正在编写几个异步工作的函数。想象一下这个例子
signUpUser(userInfo, callback) //callback(err, token)
createToken(userInfo, callback) // callback(err, token)
现在我想知道是否返回回调或只是在我的函数中调用它们,我的意思是例如在createToken
:
createToken(userInfo, callback) {
var token = ...;
callback(err, token); //or
return callback(err, token);
}
因为只要回调属于另一个程序员,无论出于什么原因,如果他决定在他的代码中返回一些东西,这只是阻塞它。
EDIT:在我发布了我的问题之后,我得到的答案是不可能返回任何东西,但当我在代码和节点js中深入研究时,我发现了相反的情况。下面的代码运行良好!!
function foo(a, callback) {
console.log(a);
return callback(a);
}
function bar(a) {
return a;
}
console.log(foo(3, bar));
您已经说过您的函数是异步的。这意味着它们不能返回调用回调的结果,因为它们在调用回调之前返回。因此,它们应该不返回任何内容或一些有用的上下文值,而不是调用回调的结果。那么在你的问题中的两个选择中:
function createToken(userInfo, callback) {
startAsyncProcess(function() {
// It's done, may have failed (err), may have succeeded (token)
callback(err, token);
});
}
另外,还有一点离题:考虑使用承诺而不是手动回调机制(当然,除非手动风格是为了适应大型已建立的代码库)。例如:
function createToken(userInfo) {
return new Promise(function(resolve, reject) {
startAsyncProcess(function() {
if (/*...it succeeded...*/) {
resolve(token);
} else /* ...it failed... */ {
reject(err);
}
});
});
}
(当然,如果startAsyncProcess
提供了一个承诺,您将使用该承诺。)
用法:
createToken(/*...info...*/)
.then(function(token) {
// It worked, use the token
})
.catch(function(err) {
// It failed
});
如果您返回了回调,那么您现在将如何执行异步类完成?
这就是为什么我们发送回调到异步工作,在完成它的功能或从服务器获得响应后调用它。
你可以使用Promises,这里是MDN文档。
承诺背后的思想,如果您返回一个对象,该对象具有每个异步操作的方法,如已完成和已拒绝
相关文章:
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 谷歌地图:函数返回未定义的值在console.log中运行良好
- 在promise完成后,依次运行返回promise的函数
- Scala提升了如何运行javascript函数并将返回值存储在变量中
- javascript在html元素方法运行setTimeout后返回此消息
- 使用 jQuery 从运行 MySQL 的 PHP 脚本返回信息
- 如何在运行总计计算器时返回表单输入并更新 JavaScript 变量
- $.getJSON 在返回数据后不会运行函数
- 动态弹出窗口'通过调用一个永远运行并返回's每个周期后的数据
- 自定义Angular.js过滤器在IE8中不返回任何内容,在Chrome/FF中运行良好
- 如何在返回另一个函数中的值后运行一个函数
- 未运行通过AJAX从PHP返回的Javascript代码
- 当在运行nodejs的服务器上调用new Date()时,Date将返回服务器启动时的日期
- 从Java脚本返回多个值,这些值不能在firefox上运行(在IE上运行良好)
- Ajax调用在本地返回json,但在服务器上运行时返回xml
- 如果通过 ajax 调用 PHP 页面需要一段时间才能运行/返回(并且它设置了会话变量),则第二次 ajax 调用会看到
- 当我运行返回()时"":""Javascript中的语法,只有当我将文件保存为PHP
- 当我通过循环运行返回的元素集合时,JavaScript正在复制文档get方法返回的元素
- XMLHttpRequest运行返回代码
- 我如何得到这个脚本运行返回所需的值的最小,最大和总和