【问题标题】:error when using Promise.all: TypeError: intermediate value is not iterable at使用 Promise.all 时出错:TypeError:中间值不可迭代
【发布时间】:2020-05-19 18:39:17
【问题描述】:

我正在尝试停止 sql 实例列表,因为它是异步的,我正在使用 Promise.all
代码失败:

TypeError: (intermediate value) is not iterable
    at Promise.all.sqlInstancesList.map (/workspace/index.js:40:53)
    at process._tickCallback (internal/process/next_tick.js:68:7)

我做错了什么?
这是代码:

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"
                                                 }
                                         }  
                                }       
                                const [operation] = await sqladmin.instances.patch(request);
                                // Operation pending
                                return operation.promise();
                         })
                 );
​
                // Operation complete. Instance successfully stopped.
                const message = `Successfully stopped instance(s)`;
                console.log(message);
                callback(null, message);
​
        } catch(err) {
                console.error(err);
                callback(err);
        }

}

【问题讨论】:

  • var sqlInstancesList = ["my-instance-name"]; 是您的实际代码吗?
  • 是的,这是出于调试目的,在我设法完成这项工作后,我将从输入中获取实例列表(列表包含一个或多个)
  • 如果您仍然在调试,请尝试记录/检查sqlInstancesList.map(…) 调用的结果。

标签: javascript node.js


【解决方案1】:

您是否尝试过返回操作而不是 operation.promise() ?

const [operation] = await sqladmin.instances.patch(request);
                                // Operation pending
 return operation  // instead of operation.promise()

因为如果你在等待,你不需要再次返回 promise()

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 2020-07-12
    • 2018-08-23
    • 2020-06-25
    • 2018-02-10
    • 2019-04-01
    相关资源
    最近更新 更多