【发布时间】:2021-02-24 22:47:36
【问题描述】:
总打字稿新手。我正在做一个 cdk 项目。我有一个越来越庞大的类(堆栈)。所以我想将一堆方法卸载到其他文件中以使其易于管理。
这行得通:
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda'; // need for Runtime
import * as lambda_nodejs from '@aws-cdk/aws-lambda-nodejs';
const TAG = "sn-v1-";
export class SnProdStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Lambda: Get stuff from Sigfox API
// ---------------------------------
const testLambda = new lambda_nodejs.NodejsFunction(this, 'sigfox-get', {
runtime: lambda.Runtime.NODEJS_12_X,
entry: 'lambda/sn-prod/sigfox-get.js',
handler: 'handler',
functionName: TAG + 'sigfox-get',
description: 'Get all devices from Sigfox API.',
memorySize: 256,
timeout: cdk.Duration.seconds(360)
});
}
}
但我想做这样的事情:
// class file
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda'; // need for Runtime
import * as lambda_nodejs from '@aws-cdk/aws-lambda-nodejs';
import { genSigfoxGetLambda } from './sn-prod/api-gw';
export class SnProdStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const testLambda = this.genSigfoxGetLambda;
}
}
// method file
import { SnProdStack } from '../sn-prod-stack';
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda'; // need for Runtime
import * as lambda_nodejs from '@aws-cdk/aws-lambda-nodejs';
const TAG = "sn-v1-";
export function genSigfoxGetLambda(this: SnProdStack) {
const testLambda = new lambda_nodejs.NodejsFunction(this, 'sigfox-get', {
runtime: lambda.Runtime.NODEJS_12_X,
entry: 'lambda/sn-prod/sigfox-get.js',
handler: 'handler',
functionName: TAG + 'sigfox-get',
description: 'Get all devices from Sigfox API.',
memorySize: 256,
timeout: cdk.Duration.seconds(360)
});
return testLambda;
}
这是一个很小的最小可重现示例。整个代码非常庞大,每件事都有 10 或 20 个。我的计划是对我需要制作的每种类型的绑定使用工厂方法并传入一个选项对象。现在的问题是我写的代码什么都不做。
【问题讨论】:
-
“什么都没有”是什么意思?
-
const testLambda = this.genSigfoxGetLambda;没有调用函数,只是分配它。 -
@DigitalDrifter OK...为什么第一个版本有效。那是在做同样的事情,不是吗?
-
不,第一个示例是您将新实例分配给
testLambda。二是对导入的函数进行赋值,需要实际调用函数获取返回值,即const testLambda = this.genSigfoxGetLambda(this);。 -
啊哈。
const testLambda = this._genSigfoxGetLambda();和private _genSigfoxGetLambda = genSigfoxGetLambda;有效。非常混乱的语言。
标签: typescript aws-cdk