在循环中调用多个异步调用无法正常工作

时间:2019-04-10 04:37:42

标签: javascript asynchronous

我正在通过数组进行映射,然后调用三个异步调用,这些调用返回参数信息以进行另一个调用。我希望代码一次占用一个帐户,并在继续到数组中的下一个帐户之前先经历每个异步调用。现在的问题是,代码正在通过第一个异步调用运行所有帐户,然后移至第二个异步调用,通过所有异步操作运行所有帐户,第三个异步。到目前为止,这是我尝试过的:

height

我也尝试过:

  @IBInspectable var leftImage: UIImage? {
        didSet {
            updateView()
        }
    }

func updateView() {
    if let image = leftImage
    {
        leftViewMode = UITextField.ViewMode.always
        if (UIDevice.current.userInterfaceIdiom == .phone)
        {
            let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
            imageView.contentMode = .scaleAspectFit
            imageView.image = image
            imageView.tintColor = color
            leftView = imageView
        }
        if (UIDevice.current.userInterfaceIdiom == .pad)
        {
            let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
            imageView.contentMode = .scaleAspectFit
            imageView.image = image
            imageView.tintColor = color
            leftView = imageView
        }
    }
    else
    {
        leftViewMode = UITextField.ViewMode.never
        leftView = nil
    }
}
  

我希望循环看起来像:帐户1   ->参数1   ->参数2   -> param3

     

帐户2   ->参数1   ->参数2   -> param3

     

相反,我得到:帐户1   ->参数1帐户2   -> param1

     

帐户1   ->参数2帐户2   -> param2

     

帐户1   -> param3帐户2   -> param3

1 个答案:

答案 0 :(得分:1)

由于您没有使用promises中的accounts.map返回,因此根本没有理由使用地图

您可能想要一个简单的for...of循环

async function report(){
  let accounts = await getAccountsForTimezone('Eastern Time (US & Canada)');
  for (const account of accounts) {
    await delay(1000)  
    const param1 = await scope1(account)
    const param2 = await scope2(account)
    const param3 = await scope3(account)
    const response = insertData(param1, param2, param3).catch(reject)
  }
};