client
вызывается до того, как инициализируется; client
var "экспортируется" (и вызывается) до завершения функции async
. Когда вы звоните await client()
, клиент все равно будет undefined
.
отредактируйте, попробуйте что-то вроде этого
var client = async which => {
var result = await initSecrets("MyWebApi");
var secret = JSON.parse(result.Payload);
let api = new MyWebApiClient(secret.API_KEY, secret.API_SECRET);
return api(which) // assuming api class is returning a promise
}
async function initSecrets(secretName) {
var input = {
"secretName" : secretName
};
var result = await lambda.invoke({
FunctionName: 'getSecrets',
InvocationType: "RequestResponse",
Payload: JSON.stringify(input)
}).promise();
return result;
}
exports.handler = async function (event, context) {
var myReq = await client('Request');
console.log(myReq);
};
Если Ваш язык поддерживает положительные предварительные утверждения, то я думаю, что следующий regex будет работать:
(\d)(?=(\d{3})+$)
Продемонстрированный в Java:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class CommifyTest {
@Test
public void testCommify() {
String num0 = "1";
String num1 = "123456";
String num2 = "1234567";
String num3 = "12345678";
String num4 = "123456789";
String regex = "(\\d)(?=(\\d{3})+$)";
assertEquals("1", num0.replaceAll(regex, "$1,"));
assertEquals("123,456", num1.replaceAll(regex, "$1,"));
assertEquals("1,234,567", num2.replaceAll(regex, "$1,"));
assertEquals("12,345,678", num3.replaceAll(regex, "$1,"));
assertEquals("123,456,789", num4.replaceAll(regex, "$1,"));
}
}
Следующая ссылка предполагает, что AS3 делает?
Если Ваш regex механизм имеет положительные предвидения, Вы могли бы сделать что-то вроде этого:
string.replace(/(\d)(?=(\d\d\d)+$)/, "$1,")
Где положительное предвидение (? =...), означает, что regex только соответствует, когда предварительное выражение... соответствует.
(Обратите внимание, что lookaround-выражения не всегда очень эффективны.)
Это действительно не лучшее использование RegEx... Я не знаю о функции форматирования чисел, но этот поток, кажется, предоставляет решение.
function commaCoder(yourNum):String {
//var yourNum:Number = new Number();
var numtoString:String = new String();
var numLength:Number = yourNum.toString().length;
numtoString = "";
for (i=0; i<numLength; i++) {
if ((numLength-i)%3 == 0 && i != 0) {
numtoString += ",";
}
numtoString += yourNum.toString().charAt(i);
trace(numtoString);
}
return numtoString;
}
Если Вы действительно настойчивы при использовании RegEx, Вы могли бы просто инвертировать строку, применить функцию замены RegEx, то инвертировать ее назад.
sexeger хорош для этого. Короче говоря, sexeger является обратным regex, выполненным против обратной строки, из которой Вы инвертируете вывод. Это обычно более эффективно, чем альтернатива. Вот некоторый псевдокод для того, что Вы хотите сделать:
string = reverse string
string.replace(/(\d{3})(?!$)/g, "$1,")
string = reverse string
Вот, реализация Perl
#!/usr/bin/perl
use strict;
use warnings;
my $s = 13_456_789;
for my $n (1, 12, 123, 1234, 12345, 123456, 1234567) {
my $s = reverse $n;
$s =~ s/([0-9]{3})(?!$)/$1,/g;
$s = reverse $s;
print "$s\n";
}