私は、次のコードを理解しようとしている:私の理解が正しければ定義時に匿名関数が呼び出されますか?
const Storage = artifacts.require("./Storage.sol");
contract('Storage', function(accounts) {
let storage;
before(async() => {
storage = await Storage.deployed();
});
it("Set user data", async() => {
await storage.setUserData(1, 1234);
const data = await storage.getUserData.call(1);
assert.equal(data, 1234, 'Return user data');
});
});
は教えてください。 "before"は、無名関数として知られるパラメータとして名前のない関数を受け入れる関数です。
匿名関数はasync()としてマークされています。つまり、サーバーからの戻り呼び出しをブロックするまでブロックされます。 ストレージ変数が初期化されるまで、anonymous関数は戻りません。 before関数は、別の関数内で定義されているため、直ちに呼び出されます。 "before"という単語が別の関数の中に書かれていない限り、別の関数の外で定義されていれば呼び出されません。
また、匿名関数は別の関数の内部で定義されているため、すぐに呼び出されます。
ありがとうございます!
'before'は関数を受け付ける関数ですが、匿名かどうかは関係ありません。また、' async'関数はブロックしないので、約束事を通してスケジューリングできます。 – MinusFour
"*" before "という単語が書かれていない限り*" - これは 'before'が特別なキーワードだと思ったように聞こえます。そうではなく、 'before'という名前のjs関数です。そのコールバックは、実装に完全に依存します。 'function before(cb){/ * do nothing * /}'や 'function before(cb){setTimout(cb、50);/* later * /} '、または'関数の前に(cb){cb(); cb();/* 2回* /} '。 – Bergi