gpt4 book ai didi

javascript - 是否根据定义调用匿名函数?

转载 作者:行者123 更新时间:2023-11-30 11:29:48 24 4
gpt4 key购买 nike

我正在尝试理解以下代码:

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 函数被立即调用,因为它已在另一个函数中定义。如果它是在另一个函数之外定义的,那么它不会被调用,除非“之前”这个词写在另一个函数内部。
此外,匿名函数也会立即被调用,因为它是在另一个函数中定义的。

谢谢!

最佳答案

一个简短的说明:异步函数不要阻塞。它们基于 promise ,因此虽然异步函数的执行在等待期间停止,但它不会阻塞线程。这就是它们如此有用的原因之一。

您的问题的答案是否定的,匿名函数或其他函数不会在定义时自动调用。

例如:

function test() {
() => console.log('hello')
}

除非您实际调用 test(),否则不会记录。它是否在回调中也没关系。例如,我们可以编写一个名为 before() 的函数:

function before(cb){
}

并传递给它一个匿名回调函数:

before(() => console.log("hello"))

它不会触发回调,因此控制台永远不会记录显示根据定义没有任何反应。

通常 before() 会接受回调并调用它:

function before(cb){
cb()
}

在使用 cb() 在 before 函数中实际调用它之前,该函数仍然不会执行。在最后一个示例中,我们将调用 before(cb) 并且 before 将依次调用我们的回调。

关于javascript - 是否根据定义调用匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46694323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com