我有一系列要删除的值,但希望用户确认他要删除该值。我计划使用提示节点模块,但不知道如何组合它们,以便在用户确认(或不删除)当前值后移动到数组中的下一个值。简而言之,以下代码不起作用:
var arr = ["1","2","3"];
for (var i in arr) {
console.log("Delete " + arr[i] + "?");
prompt.get(['response'], function (err, result) {
console.log(' reponse: ' + result.response);
// if ...
});
}
有什么想法吗?非常感谢。
答案 0 :(得分:0)
您的代码无效,因为您尝试在同步循环prompt.get
中使用异步调用for
。
如果你必须进行异步调用,你应该等待它的回调。在你的情况下,你可以使用像
function removeEl(idx, arr, done){
if(idx>=arr.length) return done(arr);
prompt.get(['response'], function (err, result) {
console.log(' reponse: ' + result.response);
if(/*user said yes*/){
arr.splice(idx, 1);
removeEl(idx, arr, done)
}else{
removeEl(idx+1,arr, done)
}
});
}
function removeWithPrompt(arr, done){
removeEl(0, arr, done);
}
removeWithPrompt([1,2,3], function (modified) {
// modified contains non-deleted elements
})
或使用像async.each
这样的异步循环答案 1 :(得分:0)
@ user1280859关于这个问题是正确的,但也许最好采用提示功能而不是递归或异步循环:
var prompt = require('prompt');
prompt.start();
var arr = ["1","2","3"];
var promptArr = arr.map(function(num) {
return "Delete " + num + "?";
});
prompt.get(promptArr, function (err, result) {
console.log(result);
});
OutPut:
prompt: Delete 1?: y
prompt: Delete 2?: n
prompt: Delete 3?: y
{ 'Delete 1?': 'y', 'Delete 2?': 'n', 'Delete 3?': 'y' }