2015-04-05 88 views
0

我是相当新的承诺,如此裸露与我。 我想从一个函数返回一个值,它调用使用承诺的第三个库。承诺和阻止功能,返回值

比方说,我有一个函数(打字稿):

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

里面我打电话返回一个承诺第三方库。 如何从这个函数返回只有lib返回的值而不重写我的函数的值?我知道这违背了承诺的目的,但是lib只提供承诺作为返回值。

+0

不,承诺打败你。阻止并等待异步值是不可能的。 – Bergi 2015-04-05 11:04:04

+0

函数回调是什么? lib.test(()=> {})?该lib提供了两个! – Mantzas 2015-04-05 11:22:01

+1

是的,你可以从你的函数调用一个回调函数(或者传递给lib函数)。但是你不能从你的函数中返回值(仅仅是它的承诺)。 – Bergi 2015-04-05 15:15:23

回答

2

承诺代表将在未来一段时间内可用的异步结果。您无法将异步结果转换为Javascript中的同步结果。这是不能做到的。你的操作需要被调用者视为异步,并且你的方法的接口需要是异步的(可能使用承诺,或者你可以隐藏承诺,如果你愿意,可以回到普通的回调)。

+0

这是众所周知的,因为我在承诺中有新鲜感,但是在c#TPL中有很多经验,我认为在那里我可以使用一种构造或方法使异步调用变成同步调用,而不需要重写函数,它来电者等。 – Mantzas 2015-04-06 06:15:06

+0

@Mantzas - 我的回答是告诉你,在Javascript中,没有办法将异步操作转换为同步操作。它不能做到。 – jfriend00 2015-04-06 06:27:14

+0

谢谢。必须在重构整个项目之前删除这个lib! – Mantzas 2015-04-06 11:27:59