同期タスク(ブロック)は一般的に不良です。非同期にそれを行う本当の理由がない場合は、イベントコールバックを使用することを強くお勧めします。
ファイルが壊れていてHTML5 APIが読み込めないとしたら、結果は得られません。それはあなたのコードを壊し、サイトをブロックするでしょう。または、誰かが10GBファイルを選択すると、ファイルが完全に読み込まれるまでHTMLページがフリーズします。その非同期イベントハンドラを使用すると、起こりうるエラーをキャッチできます。
var ready = false;
var result = '';
var check = function() {
if (ready === true) {
// do what you want with the result variable
return;
}
setTimeout(check, 1000);
}
check();
var reader = new FileReader();
reader.onloadend = function(evt) {
// file is loaded
result = evt.target.result;
ready = true;
};
reader.readAsDataURL(file);
チェック機能、チェックレディフラグ変数がtrueに設定されている場合、毎秒:
は、コールバックでの制限を回避するには、私は簡単なトリックを使用しています。もしそうなら、あなたは結果が利用可能であることを確かめることができます。
これはベストプラクティスではないかもしれませんが、このテクニックを使ってwebappを作ったのは、同時に10回以上のsetTimeoutsを実行していて、今まで問題はありませんでした。
*「私は同期メソッドが必要です」*何らかの理由があるのはなぜですか?私はそれが可能だとは思わない。 –
firefoxにはfile.getAsDataURL()メソッドがありましたが、廃止され、いずれのブラウザーの同期バージョンでもありませんでした。 – dandavis
私はローカルストレージデータベースにパスを保存し、後でサーバーにイメージを送信する必要があります(すべてのイメージにループがあるので、同期メソッドが必要です)。 ローカル記憶域の制限を超えないように、データベースにbase64文字列を格納しないようにしたいと思います... – Laila