2017-03-03 70 views
0

我有一個要刪除的值的數組,但希望用戶確認他想要刪除該值。我計劃使用提示節點模塊,但不知道如何組合它們,以便在用戶確認(或不)刪除當前值後移動到數組中的下一個值。總之,下面的代碼將不起作用:NodeJS循環訪問數組和提示

 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

是你的項目完全是由nodeJS完成的,還是你有一些前端設計,並且js或js框架使用它? – noitse

+0

爲什麼不能工作? – paqash

回答

0

您的代碼不起作用,因爲您試圖在同步循環for內使用異步調用prompt.get
如果您必須進行異步調用,您應該等待其回調。格外你的情況,你可以使用類似

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 
}) 

或者使用asyncronous循環像async.each

0

@ user1280859是正確的有關問題,但也許這是更好地採取adventage的提示功能,而不是遞歸或asyncronous環:

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); 
     }); 

輸出:

prompt: Delete 1?: y 
prompt: Delete 2?: n 
prompt: Delete 3?: y 
{ 'Delete 1?': 'y', 'Delete 2?': 'n', 'Delete 3?': 'y' }