Jint: ์˜ˆ๊ธฐ์น˜ ์•Š์€ Promise.all ๋™์ž‘

์— ๋งŒ๋“  2021๋…„ 05์›” 28์ผ  ยท  10์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: sebastienros/jint

๋จผ์ € ์‹ ์ œํ’ˆ ์ถœ์‹œ์™€ ํ”„๋ผ๋ฏธ์Šค ์‘์›์— ๋งŽ์€ ์‘์› ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ํ›Œ๋ฅญํ•œ ์ผ!

์ง€๊ธˆ ์•ฝ์†์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋‚ด๊ฐ€ ํ•  ๋•Œ

var evaluationResults = engine.Evaluate("return Promise.all(someArray)").UnwrapIfPromise().ToObject(); ,

someArray ์—๋Š” ํ”„๋ผ๋ฏธ์Šค๊ฐ€ ์ „ํ˜€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์ง€๋งŒ _one_ ๊ฐœ์ฒด, ์ฆ‰ .Net Dictionary<string, object> ๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

evaluationResults ์— ๋‹จ์ผ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด ๋Œ€์‹  ๋ฐฐ์—ด ๋‚ด์—์„œ ์‚ฌ์ „์˜ KeyValuePair<string, object> ๋ฐฐ์—ด์„ ์–ป์Šต๋‹ˆ๋‹ค.

Dictionary<string, object> ์˜ ์ธ์Šคํ„ด์Šค ๋Œ€์‹ ์— ํ•ด๋‹น ๋ฐฐ์—ด์— ๊ฐ„๋‹จํ•œ ๋‹จ์ผ JS ๊ฐœ์ฒด๋ฅผ ๋„ฃ์œผ๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

someArray ์— true ์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋งค๋ ฅ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  10 ๋Œ“๊ธ€

๋ณด๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์กฐ์‚ฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹คํŒจํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ณด๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์กฐ์‚ฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹คํŒจํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ฌผ๋ก  ์ž…๋‹ˆ๋‹ค .

๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋ฉฐ ํ›Œ๋ฅญํ•œ ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@shestakov ์ด๊ฒƒ์€ ์•ฝ๊ฐ„ ์ด์ƒ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ธฐ์ค€์„ ์„ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

@shestakov ์ด๊ฒƒ์€ ์•ฝ๊ฐ„ ์ด์ƒ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ธฐ์ค€์„ ์„ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

@lahma ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜ˆ์‹œ๋กœ ๋ช‡ ๊ฐ€์ง€ _passing_ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ๋กœ ๊ต์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. https://github.com/sebastienros/jint/pull/911 ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. #911์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@lamhma ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ถ”๊ฐ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ํœด๋ฆฌ์Šคํ‹ฑ( one , two )์ด ์กด์žฌํ•˜๋Š” ์ด์œ ๋ฅผ ๊ฐ„๋‹จํžˆ(๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด) ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‹ค์Œ์—๋Š” ๋” ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”.

new Array(myClrObject) ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ณ  ๋•Œ๋•Œ๋กœ ๊ฐ’ ์—ด๊ฑฐ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ด ๊ฒฝ๋กœ์— ํ•ด๋‹นํ•˜๋Š” ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

public void ArrayFromShouldConvertIEnumerable()
{
    var enumerable = new []
    {
        new Person {Name = "Mike"},
        new Person {Name = "Mika"}
    }.Select(x => x);

    _engine.SetValue("a", enumerable);

    RunTest(@"
        var arr = new Array(a);
        assert(arr.length === 2);
        assert(arr[0].Name === 'Mike');
        assert(arr[1].Name === 'Mika');
    ");

    RunTest(@"
        var arr = Array.from(a);
        assert(arr.length === 2);
        assert(arr[0].Name === 'Mike');
        assert(arr[1].Name === 'Mika');
    ");
}

์ผ๋ฐ˜์ ์œผ๋กœ ์—”์ง„ ๋‚ด๋ถ€์—์„œ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ฉด ์‚ฌ๋ฌผ์„ ๋ฒˆ์—ญํ•˜๊ณ  JS ์‚ฌ์–‘์„ ๋”ฐ๋ฅด๋Š” ๊ณต๊ฐœ API ์‚ฌ์šฉ์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CLR interop์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฏน์Šค์— ์•ฝ๊ฐ„์˜ ์ถ”๊ฐ€ ํ–ฅ์‹ ๋ฃŒ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ผ๋ฐ˜ ๋…ผ๋ฆฌ/์‚ฌ์–‘์—์„œ ์•ฝ๊ฐ„์˜ ํŽธ์ฐจ๋ฅผ ์ผ์œผํ‚ต๋‹ˆ๋‹ค.

@lahma ๋Š” ArrayConstructor.Construct ๋ฅผ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๊ฐ€ ๋” ๊นŠ์€ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ์‚ฌ์ „(IEnumerable์„ ์ƒ์†ํ•จ) ๋ฐฐ์—ด๊ณผ ์œ ์‚ฌํ•œ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(KeyValuePair ์œ ํ˜•์˜ ํ•ญ๋ชฉ ํฌํ•จ)), ์•„๋‹ˆ๋ฉด ํ•ญ์ƒ ๊ฐ์ฒด์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰๋˜์–ด ํ•ญ์ƒ ํŠน๋ณ„ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์‹ค์ œ๋กœ ์™œ interop์™€ ๊ฐ™์€ ๋ฐฐ์—ด์ด์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ฐ˜๋ก€๋ฅผ ์ œ์‹œํ•  ๋•Œ๊นŒ์ง€ ์‚ฌ์ „์— ๋Œ€ํ•œ ๋ฐฐ์—ด ์œ ์‚ฌ์„ฑ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@lahma ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰