函数应用不等待从 web3 contract.getpastevents 返回的承诺



我是使用函数应用程序和JS的新手。以下是我正在尝试做的事情:

  1. 我们有一个使用 Azure 区块链服务的内部仲裁群集。 我们已经在其上部署了一个合约,需要检查此合约的事件。一般来说,想要与这个合同互动。
  2. 为了与此合约进行交互,我们计划使用将使用 Azure 函数应用托管的节点 js 应用。
  3. 我创建了一个测试脚本,该脚本创建合约实例并记录getpastevents方法的输出。

该脚本在我的本地节点设置上工作正常,但在函数应用中,执行不会等待承诺完成并捕获最终结果。相反,它只是记录"承诺待定"并继续前进。

请忽略 myBlob 输入,我只是在 Blob 触发器中测试这个函数。 法典:

module.exports = async function (context, myBlob) {
context.log("JavaScript blob trigger function processed blob n Blob:", context.bindingData.blobTrigger, "n Blob Size:", myBlob.length, "Bytes");
var Web3 = require('web3')
const rpcURL = "https://<myapp>.blockchain.azure.com:port/key"
const web3 = new Web3(rpcURL)
const account = <validAccount>
var privateKey = Buffer.from(<validkey>, 'hex')
var abi=,Validabi>
var contractAddress=<contractaddress>;
var contract = new web3.eth.Contract(abi, contractAddress);

contract.getPastEvents('allEvents', {fromBlock : 0, toBlock :'latest'}).then((events) => { result = events;
context.log(result)}).catch((error)=>{context.log('error')});
};

通过仲裁松弛频道得到答案。 以下是工作代码:

module.exports = async function (context, myBlob) {
context.log("JavaScript blob trigger function processed blob n Blob:", context.bindingData.blobTrigger, "n Blob Size:", myBlob.length, "Bytes");
var Web3 = require('web3')
const rpcURL = "https://<myapp>.blockchain.azure.com:port/key"
const web3 = new Web3(rpcURL)
const account = <validAccount>
var privateKey = Buffer.from(<validkey>, 'hex')
var abi=,Validabi>
var contractAddress=<contractaddress>;
var contract = new web3.eth.Contract(abi, contractAddress);
let events = contract.getPastEvents('allEvents', {fromBlock : 0, toBlock :'latest'})
.catch((error)=>{context.log('error')});
context.log(events);
};

最新更新