javascript sellerid被错误地传递给其他函数

hjzp0vay  于 2022-12-02  发布在  Java
关注(0)|答案(2)|浏览(148)
const productIds = ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr', ...]

const generateBearerToken = async () => {
    await //api calling
    } // will return bearerToken

const getSubmissions = async () => {
    await // api calling
    }

let sellerId = null
const getPublisherId = async (productId) => {
    //generating bearer token using generateBearerToken() 
    await GenerateBearerToken()
    //calling API here and setting the value of sellerId
    const response = await axios.get(url, { header })
    //From this response, I am setting the value of sellerId, then calling getSubmission()
    sellerId = response.data.sellerId
    await getSubmission()
}

productsIds.map((productId) => {
    await getPublisherId(productId)
})

getPublisherId得到的sellerId,我在调用getSubmissions时在头中使用该值。(sellerId)对于不同的产品ID是不同的。但是当我调用上面的map函数时,一个函数的sellerId被传递到另一个调用getSubmissions的函数中,不应该是这样。sellerId应该只传递给那个特定的getSubmissions。如何避免这种冲突?

0h4hbjxa

0h4hbjxa1#

这不应该是全球性的:

let sellerId = null

每个异步操作都在修改该值,任何其他操作都将使用 * 当时 * 的值,而不是调用该操作时 * 的值。
不要使用全局变量将值从一个函数传递到另一个函数,只需将值传递到函数即可:

const getSubmissions = async (sellerId) => {
  //...
};

以及:

const getPublisherId = async (productId) => {
    await GenerateBearerToken();
    const response = await axios.get(url, { header });
    await getSubmissions(response.data.sellerId);
};

顺便说一句,代码 * 建议 * 您在其他地方犯了同样的错误,同样的事情可能需要在其他地方纠正。

41ik7eoe

41ik7eoe2#

  • 避免全局变量
  • 您正在使用.map作为“for each”。Map用于转换数据。

您至少需要:

/* let sellerId = null  // < Remove global */
const getPublisherId = async (productId) => {
   [...]
   const sellerId = response.data.sellerId
   await getSubmission()
   return sellerId
}

const allSellerIds = productsIds.map((productId) => {
    await getPublisherId(productId)
})

但是,您可能希望查找Promise.allSettled和其他内容,以避免每个发布者按顺序一次获取一个。

相关问题