2015-04-05 4 views
0

Я довольно новичок в обещаниях, так голый со мной. Я пытаюсь вернуть значение из функции, которая вызывает третий lib, который использует обещания.функция обещания и блокировки, которая возвращает значение

допустим у меня есть функция (машинопись):

static get(): string { 
    return ??? lib.test().done(()=> {return "done"; }).fail(()=>{ return "fail"}); 
} 

Внутри я звоню 3-ю библиотеку партии, которая возвращает обещание. Как я могу вернуть из этой функции только значение, которое lib возвращает в качестве обещания без перезаписи моей функции? Я знаю, что это побеждает цель обещаний, но lib предоставляет только обещания в качестве возвращаемых значений.

+0

Нет, обещает победить вас. Блокировать и ждать значения async невозможно. – Bergi

+0

что касается функции callback's? lib.test (() => {})? lib предоставляет оба! – Mantzas

+1

Да, вы можете вызвать обратный вызов из своей функции (или передать ее в lib). Но вы не можете вернуть значение из своей функции (это только обещание). – Bergi

ответ

2

Обещание представляет собой асинхронный результат, который будет доступен в будущем. Вы не можете сделать асинхронный результат синхронным результатом в Javascript. Это просто невозможно. Ваша операция должна быть обработана как асинхронная, а интерфейс к вашему методу должен быть асинхронным (возможно, используя обещание или вы можете скрыть обещание и вернуться к простому обратному вызову, если хотите).

+0

это известно, так как я свежие в обещаниях, но имею большой опыт работы в C# TPL, я думал, что там, где есть конструкция или метод, который я мог бы использовать, чтобы сделать асинхронный вызов синхронным без необходимости переписывать функцию, это вызывающий и т. д. – Mantzas

+0

@Mantzas - мой ответ говорит вам, что в Javascript нет возможности сделать асинхронную операцию синхронной. Это невозможно. – jfriend00

+0

спасибо. нужно сбросить lib перед реорганизацией всего проекта! – Mantzas

Смежные вопросы