Javascript 为什么可以';回流中的同步动作是否也可用作保证?

Javascript 为什么可以';回流中的同步动作是否也可用作保证?,javascript,refluxjs,Javascript,Refluxjs,在我的代码中,我大量使用该模式。下面是一个例子: var actions = Reflux.createActions({connectToFacebook: {asyncResult: true}}); actions.connectToFacebook.listenAndPromise(function(){ var facebookOauthPromise = _doFacebookConnect(); // implementation elided return

在我的代码中,我大量使用该模式。下面是一个例子:

var actions = Reflux.createActions({connectToFacebook: {asyncResult: true}});

actions.connectToFacebook.listenAndPromise(function(){

    var facebookOauthPromise = _doFacebookConnect(); // implementation elided

    return facebookOauthPromise.then(function(token){
        return $.post('/api/facebook/connect', {token: token});
    });
});

var promise = actions.connectToFacebook();
promise.then(function(){
    // do something on success
});
这很有效。首先是oAuth,然后是POST请求完成时,
connectToFacebook.completed
,以及我的外部
promise。然后按照预期触发

但是,我必须将
{sync:true}
添加到操作的定义中,因为
\u doFacebookConnect
的实现调用了
window.open
,除非在与用户单击事件相同的调用堆栈上调用,否则将阻止该操作。默认情况下,在调度事件时,Reflection将使用
。.nextTick
,因此它不再位于同一堆栈上

当我这样做时,操作仍然正常工作,弹出窗口阻止程序不再是一个问题。但是,我的外部
promise.then
无法执行,因为
actions.connectToFacebook()
的返回值现在是
未定义的
,而不是我从
列表和promise
返回的承诺


为什么反流突然停止传递返回的承诺,有什么方法可以优雅地解决这个问题吗?

我刚刚找到了一种绕过它的方法,方法是重写
action.trigger
,而不是使用
action.listendPromise()

它似乎涵盖了分派
connectToFacebook.completed
(因为
this.promise()
调用和返回承诺(通过显式地这样做)


但是,我仍然不清楚为什么回流不会自动执行此操作。

我只是找到了一种绕过它的方法,方法是重写
action.trigger
,而不是使用
action.listenAndPromise()

它似乎涵盖了分派
connectToFacebook.completed
(因为
this.promise()
调用和返回承诺(通过显式地这样做)

然而,我仍然不清楚为什么回流不能自动完成这项工作

actions.connectToFacebook.trigger = function(){

    var facebookOauthPromise = _doFacebookConnect(); // implementation elided

    var promise = facebookOauthPromise.then(function(token){
        return $.post('/api/facebook/connect', {token: token});
    });

    this.promise(promise);
    return promise;
};