2017-03-03 6 views
0

削除する値の配列がありますが、ユーザーが値を削除したいことを確認する必要があります。プロンプトのNodeモジュールを使用する予定ですが、ユーザーが現在の値の削除を確認した後に配列の次の値に移動するような方法で結合する方法がわかりません。つまり、次のコードは機能しません。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のみで完全に作られていますか、それともフロントエンドのデザインがありますか? – noitse

+0

なぜこれは機能しませんか? – paqash

答えて

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

0

user1280859 @のようなasyncronousループを使用しますが、多分それは良いですParticulary代わりに再帰またはasyncronousループの迅速な機能のadventageを取ります:

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' } 
関連する問題