2017-06-05 29 views
0

ponury-kostekのおかげで私は私の問題の半分を解決しました。最初の順次関数は既に機能しています。今私はサイクルで悩んでいるだけです。APDUを使用したNode.jsの非同期要求

ここでは、順番に6つの連続したデータを読み取る必要があります。私は6つの要求を1つのパラメータ、オフセット(毎回1つずつ増加する)を変更する必要があります。

データをABCDEFの形式で取得したとしましょう。各データは258バイトのチャンクです。私はその順序でそれを読んで、それを変数またはファイルに格納したいと思います。

私もそれが約束して動作させることができます関数は、非同期IはAEFDBCまたはABFDECか...

console.log("---get bin "+offset+"---") 

を取得していているので?

コード:

function getBinPromise(){ 
    var foffset = 0x00; 
    var i = 0; 
    for(i=0; i<6;){ 
     getBinChunkPromise(foffset).then(i++) 
     foffset = foffset + 0x01; 
    } 
} 


function getBinChunkPromise(offset){ 
    return new Promise(function(resolve, reject) { 
     GetBinApdu = new 
     Buffer([0x00, 0xB0, offset, 0x00, 0x00]); 
     reader.transmit(GetBinApdu, 258, protocol, function (err, data) { 
      if(err){ 
       console.log(err); 
       reject(err); 
      } else { 
       console.log("---get bin "+offset+"---") 
       console.log('Data received:', data); 
       console.log('Last two:', data[data.length-2], data[data.length-1]); 
       fs.appendFileSync("data.txt", data); 
       console.log("------"); 
       resolve(data); 
      } 
     }) 
    }) 
} 

申し訳ありませんが、これは馬鹿であれば、私はあなたがtransmitコールバック関数内resolve/rejectに必要なJS

+0

あなたはAPDUにシーケンス番号を追加することができますので、あなたはこのような何かを得るのだろうか? – ThingyWotsit

+0

@ThingyWotsit私はそうは思わない。私はこのモジュールの送信機能を使用しています。https://github.com/santigimeno/node-pcsclite – jm8FE

+0

あなたのコードについての質問があります。コードを表示しなければなりません。 ** "(私はそれが私がデータの格納をしているコールバックを持っている送信関数を呼び出すためだと思う)** * * show *私たちはそれから問題点を教えてくれるでしょう。 – ippi

答えて

1

との新たなんです。

function selectAppPromise(){ 
    return new Promise(function(resolve, reject) { 
     SelectAppletApdu = new Buffer([0x00, 0xA4, 0x04, 0x00, 0x07, 0x60, 0x46, 0x32, 0xff, 0x00, appletoffset, 0x02]); 
     console.log("---select app---"); 
     reader.transmit(SelectAppletApdu, 40, protocol, function (err, data) { 
      if (err) { 
       console.log(err); 
       reject(err); 
      } else { 
       console.log('Data received:', data); 
       console.log('Last two:',data[data.length-2],data[data.length-1]); 
       resolve(data); 
      } 
     }); 
    }) 
} 

EDIT:

function getBinPromise() { 
    var foffset = 0x00; 
    var promises = []; 
    for (var i = 0; i < 6; i++) { 
     promises.push(getBinChunkPromise); 
    } 
    promises.reduce((prevTask, current) => { 
     return prevTask.then(current); 
    }, Promise.resolve(foffset)).then(() => { 
     console.log('all done'); 
    }); 
} 
function getBinChunkPromise(offset) { 
    return new Promise(function (resolve, reject) { 
     GetBinApdu = new Buffer([ 
      0x00, 
      0xB0, 
      offset, 
      0x00, 
      0x00 
     ]); 
     reader.transmit(GetBinApdu, 258, protocol, function (err, data) { 
      if (err) { 
       console.log(err); 
       reject(err); 
      } else { 
       console.log("---get bin " + offset + "---"); 
       console.log('Data received:', data); 
       console.log('Last two:', data[data.length - 2], data[data.length - 1]); 
       fs.appendFileSync("data.txt", data); 
       console.log("------"); 
       resolve(offset + 0x01); 
      } 
     }) 
    }) 
} 
+0

これは私の初期の機能では機能しますが、それは私の知っていることではありません。どのように私はそれをサイクルでそれを行う必要があります?私の編集をチェックしてくださいポスト。あなたを悩ませて申し訳ありませんあなたはすでに多くの助けた – jm8FE

+0

@ jm8FEこれを試してください –

+0

私は必要なもの、あなたはすごいです – jm8FE

関連する問題