gpt4 book ai didi

javascript - 异步等待和非异步函数的问题

转载 作者:行者123 更新时间:2023-11-28 03:44:33 32 4
gpt4 key购买 nike

我正在尝试处理一个使用异步函数的库,但我有点迷失了。我想调用一个返回字符串的函数,但我被绊倒了。这是我到目前为止所拥有的。 ZeroEx 库函数似乎都使用 async/await 所以我的理解是我只能从另一个异步方法调用它们。但这不会导致链式 react ,意味着每个方法都需要异步吗?或者我错过了什么?

function main() {
var broker = zmq.socket('router');
broker.bindSync('tcp://*:5671');


broker.on('message', function () {
var args = Array.apply(null, arguments)
, identity = args[0]
, message = args[1].toString('utf8');

if(message === 'TopOfBook') {
broker.send([identity, '', getTopOfBook()]);
}

//broker.send([identity, '', 'TEST']);
//console.log('test sent');
})
}

async function getTopOfBook() {
var result: string = 'test getTopOfBook';
const EXCHANGE_ADDRESS = await zeroEx.exchange.getContractAddress();
const wethTokenInfo = await zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync('WETH');
const zrxTokenInfo = await zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync('ZRX');

if (wethTokenInfo === undefined || zrxTokenInfo === undefined) {
throw new Error('could not find token info');
}

const WETH_ADDRESS = wethTokenInfo.address;
const ZRX_ADDRESS = zrxTokenInfo.address;


return result;
}

main();

函数 getTopOfBook() 不会向 main() 函数返回任何内容,因此代理永远不会发送结果。然而,带有“TEST”的注释掉的broker.send()工作正常。感谢您的浏览。

编辑:我尝试使 main 方法异步,这样我就可以使用await,但它给出了一个错误,我只能在异步函数中使用await。可能是broker.on()调用导致了这个问题?

  const main = async () => {
try{
var broker = zmq.socket('router');
broker.bindSync('tcp://*:5671');


broker.on('message', function () {
var args = Array.apply(null, arguments)
, identity = args[0]
, message = args[1].toString('utf8');

console.log(message);
if(message === 'TopOfBook') {
>> var test = await getTopOfBook();
console.log('in top of book test');

broker.send([identity, '', test]);
}

//broker.send([identity, '', 'TEST']);
//console.log('test sent');
})
} catch (err) {
console.log(err);
}
}

编辑2:我当前的工作代码,感谢所有提供建议/解决方案的人!显然我必须填写 getTopOfBook() 函数才能返回实际结果。如果您有更多建议,请发送给我。我正在尝试构建一个后端,该后端将从 geth rpc 获取数据并将其发送到 C# GUI 前端。

var main = function() {
try{
var broker = zmq.socket('router');
broker.bindSync('tcp://*:5672');

broker.on('message', function () {
var args = Array.apply(null, arguments)
, identity = args[0]
, message = args[1].toString('utf8');

if(message === 'TopOfBook') {
getTopOfBook().then((result) => {
broker.send([identity, '', result])
});
}
})
} catch (err) {
console.log(err);
}
}

async function getTopOfBook() {
var result: string = 'test getTopOfBook';
const EXCHANGE_ADDRESS = await zeroEx.exchange.getContractAddress();
const wethTokenInfo = await zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync('WETH');
const zrxTokenInfo = await zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync('ZRX');

if (wethTokenInfo === undefined || zrxTokenInfo === undefined) {
throw new Error('could not find token info');
}

const WETH_ADDRESS = wethTokenInfo.address;
const ZRX_ADDRESS = zrxTokenInfo.address;


return result;
}

main();

最佳答案

回调函数需要异步

broker.on('message', async function () {
var args = Array.apply(null, arguments)
, identity = args[0]
, message = args[1].toString('utf8');

if(message === 'TopOfBook') {
var test = await getTopOfBook();
broker.send([identity, '', test]);
}

//broker.send([identity, '', 'TEST']);
//console.log('test sent');
})

关于javascript - 异步等待和非异步函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48627635/

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