【问题标题】:Simplify ugly code in Typescript async iterables [closed]简化 Typescript 异步迭代中的丑陋代码 [关闭]
【发布时间】:2022-11-26 13:12:38
【问题描述】:

我写了一些丑陋的代码来验证我是否可以查询一个对象。

const quoterContract = getQuoterContract(quoterAddress, QuoterABI, provider);
const quotePromises = poolData.map(data => {
    const dataEnclosure = data;
    const quote = getQuotedPrice(quoterContract, tradeAmount, data.token0, data.token1, data.feeAmount ?? 0)
        .then(r =>{
            dataEnclosure.isQuotable = true;
            return dataEnclosure; 
        })
        .catch(err => { 
            dataEnclosure.isQuotable = false
            return dataEnclosure;
        });
    return quote;
})

const quoteData = await Promise.all(quotePromises)

quoteData.forEach(d => {
    console.log(` ${d.name} is quotable ${d.isQuotable}`);
});

//Function pseudo code for clarification
const getQuotedPrice = async (a,b,c,d) => {...}

这是非常丑陋和冗长的,我想简化,但我认为 typescript 中不存在 asyc iterables。有没有更简单的方法来写这个?

【问题讨论】:

  • TS 确实支持异步迭代,但它们似乎不适用于此处。除了不必要的 dataEnclosurequote 变量外,您的代码看起来很合理,可以省略它们而不会影响清晰度
  • @CertainPerformance 我不需要包含数据变量,否则我总是会更新最后的数据吗?或者是只有 javascript 并且代码在 TS 中可以正常工作
  • 如果您使用var 声明一个变量,并且您在非功能块中,那么您所关心的只是一件事。 stackoverflow.com/questions/750486这里不是这样的。
  • 这更适合 codereview.stackexchange.com 。 “丑陋”是非常主观的,并没有描述问题或期望的结果。

标签: node.js typescript asynchronous iterable


【解决方案1】:

这看起来更干净吗? ;)

import {pipeAsync, map, wait} from 'iter-ops';

const quoterContract = getQuoterContract(quoterAddress, QuoterABI, provider);

const quoteData = pipeAsync(
  poolData,
  map(dataEnclosure => {
     const {token0, token1, feeAmount = 0} = dataEnclosure;
     return getQuotedPrice(quoterContract, tradeAmount, token0, token1, feeAmount)
        .then(r => {
            dataEnclosure.isQuotable = true;
            return dataEnclosure;
        })
        .catch(err => {
            dataEnclosure.isQuotable = false
            return dataEnclosure;
        });
 }),
 wait()
);

for await (const d of quoteData) {
    console.log(`${d.name} is quotable ${d.isQuotable}`);
}

【讨论】:

    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 2013-12-03
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多