如何解决无法从函数中设置变量
我来自Python的背景,几乎没有JavaScript经验,所以我在这里有点不了解。
我正在尝试做看似简单的事情,获取一个AWS账户ID并将其存储在变量中。我正在引用this StackOverflow question中的代码,但已对其进行了一些修改。
<script src="https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js"></script>
<script>
(async () => {
window.node = await Ipfs.create()
window.node.libp2p.on('peer:discovery',(peer) => console.log('peer:discovery',peer))
window.node.libp2p.on('peer:connect',peerInfo => console.log('peer:connect',peerInfo))
window.node.libp2p.on('peer:disconnect',peerInfo => console.log('peer:disconnect',peerInfo))
window.node.libp2p.peerStore.on('peer',(peerId) => console.log('peer',peerId))
window.node.libp2p.peerStore.on('change:multiaddrs',({ peerId,multiaddrs}) => {
const addresses = []
for (const multiaddr of multiaddrs) {
addresses.push(multiaddr.buffer.toString())
}
console.log('change:multiaddrs',{peerId,multiaddrs,addresses})
})
window.node.libp2p.peerStore.on('change:protocols',protocols}) => console.log('change:protocols',protocols}))
window.node.libp2p.on('error',(err) => console.log('error',err))
window.node.libp2p.connectionManager.on('peer:connect',(connection) => {
console.log('connectionManager:peer:connect',{connection,remoteAddr: connection.remoteAddr.buffer.toString()})
})
window.node.libp2p.connectionManager.on('peer:disconnect',(connection) => console.log('connectionManager:peer:disconnect',connection))
// fake CID does not exist
results = window.node.get("QmZbj5ruYneZb8FuR9wnLuJCpCXMQudhSdWhdhp5U1oPWJ")
for await (res of results) {
for await (content of res.content) {
window.content = content
console.log(content.toString())
}
}
})()
</script>
如果我将console.log语句保留为注释状态,则会看到正在打印到控制台的AWS账户ID,这是我所期望的。但是,如果我取消注释该行,则会得到一个很大的对象(我假设它实际上是 data 变量),该对象将被打印到控制台。
我只希望 account 变量等于帐户ID。我在这里做什么错了?
解决方法
该函数是异步的,因此您无法真正分配该值。该值会在将来某个时候在回调中解析。至此console.log
已经执行。
您可以做两件事,在回调中添加需要account
的逻辑或使用诺言。
sts.getCallerIdentity({}).promise().then((data) => console.log(data));
sts.getCallerIdentity({},(err,data) => {...stuff});
请记住,这些值将在将来的某个时间解决。
,在运行回调之前,account变量不会设置所需的数据。也许尝试这样的事情?
var account = sts.getCallerIdentity({},function (err,data) {
if (err) {
console.log("Error ",err)
} else {
account = data.Account.toString();
doOtherStuff();
}
});
function doOtherStuff() {
console.log(account);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。