此上下文中的陷阱会导致执行中止。容器仍然可以,但对容器的调用将失败。请参阅手册的这一部分。
作为演示,我从这些模板之一设置了一个类型为 Nat8 的计数器容器,因此它应该支持值 0..255(含),并将其初始化为 250:
$ cat counter-canister/main.mo
actor {
stable var currentValue: Nat8 = 250;
public func increment(): async () {
currentValue += 1;
};
public query func getValue(): async Nat8 {
currentValue;
};
};
然后我点击了“增量”按钮。正如预期的那样,它从 250 增加到 255,然后在下一次单击时,它显示在浏览器控制台中:
vendor.e49a5b15.js:831 Uncaught (in promise) Error: Call was rejected:
Request ID: 0f549a49b80b31831e423196d086e36c12df51896ffaaa59e99bae7fa66047aa
Reject code: 5
Reject text: Canister ryjl3-tyaaa-aaaaa-aaaba-cai trapped explicitly: arithmetic overflow
at pollForResponse (vendor.e49a5b15.js:831)
at async n (vendor.e49a5b15.js:838)
at async HTMLButtonElement.n (index.4a11dcea.js:5)
重新加载页面显示该值仍然是最大值,255。
罐子仍然可以正常工作。如果我还费心在那里放一个减量按钮,我可以倒计时一点,然后增加值,直到我再次达到极限。