【发布时间】:2022-01-06 06:54:53
【问题描述】:
请在下面找到我的代码 sn-p。这里 credentialHash 没有在 .then() 调用中设置。 “当时”或“回调被拒绝”都没有被打印,所以我知道它没有运行,但我不明白为什么。我还在我的智能合约中包含了 setHash 函数的代码。
let hash;
await ipfs.add(JSON.stringify(this.state.credential)).then((result, error) => {
hash = result.path;
if (error) {
console.error(error)
return;
}
// Store hash on blockchain
console.log("Hash before BC:" + hash);
this.state.contract.methods.setHash(hash).send({from: this.state.account}).then((resolve) => {
console.log("In then")
this.setState({credentialHash: hash});
}, (rejected) => {
console.log("Callback rejected");
});
console.log("After setting:" + this.state.credentialHash);
});
function setHash(string memory _CredentialHash) public returns(string memory) { credentialHash = _CredentialHash; return _CredentialHash; }
console.log(this.state.contract.methods.setHash(hash).send({from: this.state.account})) 返回的结果是:
Proxy {promise: Promise, eventEmitter: EventEmitter, resolve: ƒ, reject: ƒ}
[[Handler]]: Object
get: ƒ proxyHandler(target, name)
[[Prototype]]: Object
[[Target]]: PromiEvent
eventEmitter: EventEmitter
_events: Events
[[Prototype]]: Object
_eventsCount: 0
[[Prototype]]: Object
promise: Promise
[[Prototype]]: Promise
[[PromiseState]]: "pending"
[[PromiseResult]]: undefined
reject: ƒ ()
resolve: ƒ ()
[[Prototype]]: Object
[[IsRevoked]]: false
【问题讨论】:
-
如果你知道 "fulfilled" 回调没有被执行然后检查 "rejected" 回调 ->
.then(onFulfilled[, onRejected]) -
如果你把它添加为
.then(),你为什么要await一个Promise?或者更确切地说,如果您已经await它,为什么还要在 Promise 中添加.then()?您正在混合两种语法风格 -
@JeremyThille 只要 .then 返回一个承诺,就可以混合它们......看起来不是这样
-
@JeremyThille 我已经删除了 ipfs.add(...) 之前的等待,问题仍然存在。我对 js 很陌生。
-
@Andreas 我尝试使用更新的代码测试被拒绝的回调,在任何一种情况下都没有打印日志。
标签: javascript promise blockchain ethereum web3