Typescript: рдПрд╕рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ "рд╡рд╛рдкрд╕реА" рдХрдерди рдХрд░рддреЗ рд╕рдордп рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдмрдЧ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЕрдЧре░ 2015  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

Async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдбрд╛рдЙрдирд▓реЗрд╡рд▓ рд╕рдорд░реНрдерди рдХреЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдПрдХ рдмрдЧ рдХреЛрдб рдореЗрдВ рдПрдХ рдЧрд▓рдд рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдпрдерд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд░реЗрдкреНрд░реЛ:

рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ "рд░рд┐рдЯрд░реНрди" рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реЛрдиреЗ рд╕реЗ рдЗрд╕рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ ред

рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЬрдм рднреА "num"> .5 (рдФрд░ "рд░рд┐рдЯрд░реНрди рдЯреНрд░реВ" рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ __generator рдХреЛрдб рдХреЗ рднреАрддрд░ рд╕реЗ рдЖрддреА рд╣реИ: "TypeError: рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рд╢реВрдиреНрдп рд╕рдВрджрд░реНрдн рдХрд╛ '0'

    async function itemExists(): Q.Promise<boolean> {
        var numTries = 3;
        for (var i = 0; i < numTries; i++) {
            var num = await Q.fcall(function() { return Math.random() });
            console.log(num);
            if (num > .5) {
                return true;
            }
        }
        return false;
    }

    itemExists().then(function(val) {
        console.log("All values greater than .5: " + val)
    }).catch(function(e) {
        console.error("Error: " + e);
    });

рд╡рд┐рд╢реНрд▓реЗрд╖рдг:

рд╕рдорд╕реНрдпрд╛ рд▓реВрдк рдХреЗ рднреАрддрд░ "рд╡рд╛рдкрд╕реА" рдХрдерди рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдореИрдВрдиреЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП itemExists() рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдФрд░ рдлрд┐рд░ "рдмреНрд░реЗрдХ" рдХрдерди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛, рдХреЛрдб рдХрд╛рдо рдХрд░реЗрдЧрд╛:

    // With workaround (NOT short-circuiting the loop)
    async function itemExists(): Q.Promise<boolean> {
        var numTries = 3;
        var result = false;
        for (var i = 0; i < numTries; i++) {
            var num = await Q.fcall(function() { return Math.random() });
            console.log(num);
            if (num > .5) {
                result = true;
                break;
            }
        }
        return result;
   }

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рддреНрд╡рд░рд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЬреЗрдирд░реЗрдЯ рдХреЛрдб рдореЗрдВ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдпрд╣рд╛рдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

            try {
                var operation = body(state);
                opcode = operation[0], arg = operation[1];
            } catch (e) {
                opcode = 1 /*throw*/, arg = e;
            }

рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдкрд░рд╛рдзреА рдЗрд╕ рддрдереНрдп рдореЗрдВ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЙрддреНрдкрдиреНрди рд░рд┐рдЯрд░реНрди рдФрд░ рдмреНрд░реЗрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ (рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ) рдореЗрдВ рдПрдХ рдЕрд╕рдВрдЧрддрд┐ рд╣реИред рдЕрд░реНрдерд╛рддреН, 3 рдХрднреА "рдмреНрд░реЗрдХ" рдФрд░ рдХрднреА-рдХрднреА "рд░рд┐рдЯрд░реНрди" рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

function itemExists() {
    return new Q.Promise(function (_resolve) {
        _resolve(__awaiter(__generator(function (_state) {
            switch (_state.label) {
                case 0:
                    numTries = 3;
                    i = 0;
                    _state.label = 1;
                case 1:
                    if (!(i < numTries))
                        return [3 /*break*/, 4];
                    return [4 /*yield*/, Q.fcall(function () {
                        return Math.random();
                    })];
                case 2:
                    num = _state.sent;
                    console.log(num);
                    if (num > .5) {
                       return [3 /*return*/, true];
                    }
                    _state.label = 3;
                case 3:
                    i++;
                    return [3 /*break*/, 1];
                case 4:
                    return [2 /*return*/, false];
            }
        })));
    });
    var numTries, i, num;
}
itemExists().then(function (val) {
    console.log("All values greater than .5: " + val);
}).catch(function (e) {
    console.error("Error: " + e);
});

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@ d180cf рд╣рдо рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ :)

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдЬрдирд░реЗрдЯрд░ рдХреЗ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рдЙрддреНрд╕рд░реНрдЬрди рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ [email protected] es5 рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп yield рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

@ d180cf рд╣рдо рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ :)

рдпрд╣ рдЕрдм 4685646 рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реЗ 2.1 рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рдПрд╕рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрди рдбрд╛рдЙрдирд▓реЗрд╡рд▓ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

blendsdk picture blendsdk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DanielRosenwasser picture DanielRosenwasser  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

seanzer picture seanzer  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dlaberge picture dlaberge  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

manekinekko picture manekinekko  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ