Web3をAngular 4に正しく統合しようとすると、window3web3が存在するかどうかを確認する前にウインドウがロードされるのを待つ必要があるweb3サービスを作成します。注射した。そして、これが行われた後にのみ、このサービスに問い合わせることができるはずです。ここでMetamaskのマニュアルexcerptから関連するコードは次のとおりです。ウインドウイベントに基づくサービスの角度4非同期初期化
window.addEventListener('load', function() {
// Checking if Web3 has been injected by the browser (Mist/MetaMask)
if (typeof web3 !== 'undefined') {
// Use Mist/MetaMask's provider
window.web3 = new Web3(web3.currentProvider);
} else {
console.log('No web3? You should consider trying MetaMask!')
// fallback - use your fallback strategy (local node/hosted node + in-dapp id mgmt/fail)
window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
// Now you can start your app & access web3 freely:
startApp()
})
私は私がやりたいように見えるthis other answerを見つけましたが、観察可能に約束を変換します。
このweb3オブジェクトをラップするAngular4サービスを初期化するにはどうしたらよいですか?web3のメンバに対するリクエストが初期化されるのを待つようにしますか?
現在、私が使用しているコードはインターバルを使用していますが、非常に乱雑だと感じるので、私はそれを気に入らないのです。