You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Promise.all停止SQL实例时遇TypeError:中间值不可迭代,求排查

解决Promise.all中TypeError: (intermediate value) is not iterable的问题

这个错误的根源很明确:你在尝试对sqladmin.instances.patch()返回的结果做数组解构,但实际上这个方法返回的并不是可迭代的数组,而是一个单一的Operation对象。

具体问题分析

你代码里的这行是触发错误的关键:

const [operation] = await sqladmin.instances.patch(request);

Google Cloud SQL Admin API的instances.patch()方法返回的Promise会直接解析为一个Operation实例,而不是包含单个元素的数组。当你用[operation]这种数组解构语法去接收非数组的值时,JS就会抛出"(intermediate value) is not iterable"的错误。

修正方案

只需要把数组解构改为直接赋值即可,修改后的完整代码如下:

const { google } = require('googleapis')
const { auth } = require('google-auth-library')
const sqladmin = google.sqladmin('v1beta4')

exports.stopSqlInstance = async (event, context, callback) => {
  try {
    const authRes = await auth.getApplicationDefault()
    var sqlInstancesList = ["my-instance-name"];
    await Promise.all(
      sqlInstancesList.map(async (instance) => {
        console.info("stopping " + instance);
        var request = {
          auth: authRes.credential,
          project: "my-project-id",
          instance: instance,
          requestBody: {
            "settings": {
              "activationPolicy": "NEVER"
            }
          }
        }
        // 去掉数组解构,直接接收返回的Operation对象
        const operation = await sqladmin.instances.patch(request);
        // 等待异步操作完成
        return operation.promise();
      })
    );
    // 所有实例停止操作完成
    const message = `Successfully stopped instance(s)`;
    console.log(message);
    callback(null, message);
  } catch(err) {
    console.error(err);
    callback(err);
  }
}

额外调试建议

如果以后遇到类似的API返回值结构不确定的问题,可以先临时打印返回结果,比如:

const result = await sqladmin.instances.patch(request);
console.log('API返回结果:', result);

这样能直观看到返回值的结构,避免错误的解构方式。

内容的提问来源于stack exchange,提问作者dina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:07:50