我正在解析一个输入文件并使用 Array.every 函数运行每个元素。根据结构,需要用户手动输入。 因此,如果您有这样的例子:
configData.users.every(function(user){
if(user.enabled == 1){
if(user.mobile == 1){
prompt.start();
prompt.get(['mCode'], function (err, result) {
//Do something...
//return needed here!
});
}else{
//Do something else...
return true;
}
}
});
所以在我的例子中,提示符是在用户输入输入时调用回调函数。此时,哪里很清楚并且可以处理下一个元素。那么此时如何调用 return 来继续 every() 函数呢?
感谢您的帮助。
最佳答案
您无法同步执行异步操作,而这本质上正是您想要做的。正如评论中提到的, promise 是最好的方法。如果想直接写,最简单的做法是:
function handle_users(users) {
var i = 0;
function _internal() {
if (i >= users.length) return;
var user = users[i];
if (user.enabled == 1) {
if (user.mobile == 1) {
prompt.start();
prompt.get(['mCode'], function (err, result) {
//Do something...
//return needed here!
i++;
_internal();
});
} else {
i++;
_internal();
return true;
}
}
internal();
}
我们定义了一个内部函数,我们从 prompt.get
的回调中以某种递归方式调用该函数。
如果你想获取所有用户都符合资格或者输入了正确的关键字或者其他什么信息,那么在顶层保留一个 bool 变量,失败时将其设置为 false,然后从函数返回的地方。或者,如果您想在第一次失败时停止处理,就像 every
那样,您可以在 _internal
顶部进行检查并立即返回。
关于javascript - Array.every() - 可以在回调中返回吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34238678/