我試圖理解下面的代碼:是否定義了匿名函數?
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(),這意味着它將阻塞,直到它從服務器獲得回調。 在存儲變量初始化之前,匿名函數將不會返回。 之前函數被立即調用,因爲它已被定義在另一個函數內。 如果它被定義在另一個函數之外,那麼它將不會被調用,除非在另一個函數中寫入「before」這個詞。
此外,匿名函數也會立即調用,因爲它是在另一個函數內部定義的。
謝謝!
''之前'是一個接受函數的函數,不管它是否是匿名函數都沒關係,也沒有'async'函數不會阻塞,它們會讓您通過promise來理解調度。 – MinusFour
「*除非單詞」之前「被寫入*」 - 這聽起來好像你相信'之前'是一個特殊的關鍵字。它不是,它只是一個通常的js函數,名稱爲'before'。其回調會發生什麼,完全取決於實施。它可以是'(cb){/ *什麼都不做* /}'之前的函數,或者(cb){setTimout(cb,50)之前的函數。/* later * /}',或'function before(cb){cb(); CB();/*兩次* /}'。 – Bergi