来自setTimeout回调函数的返回值在哪里?

时间:2012-08-03 19:42:09

标签: javascript callback

我有一个回调函数,我多次回调(通过setTimeOut递归)...只有一个条件我想要捕获一个返回值,也就是回调完成后回调。< / p>

然而在这种情况下,当我退回某些东西时,我没有达到我想要的地方,而且我不知道它在哪里。在下面的代码段中有两个标记这些点的console.log语句。我发送的地方......以及我期待的地方。

        if( MC.C.movePane( pane_element, 0, 0, 0, 'begin' ) ) {
            cover_element.style.display = 'none';
            console.log('I never got it');
        }
        return o_p;
    },
    movePane: function( pane_element, start, end, index, state ) {
        if( ( state === 'begin' ) ) { // init the function
            start = parseInt( window.getComputedStyle( pane_element, null ).getPropertyValue("top"), 10 );
            end = start + 40;
            index = start;
            state = 'down';
            MC.C.movePane( pane_element, start, end, index, 'down' );
        }
        if( ( state === 'down' ) && ( index < end ) ) { // move down
            index += 1;
            pane_element.style.top = ( index ) + 'px';
            setTimeout( function( ){ MC.C.movePane( pane_element, start, end, index, state ); }, 1 );
        }
        else if( ( state === 'down' ) && index === end ) { // hold
            state = 'up';
            setTimeout( function( ){ MC.C.movePane( pane_element, start, end, index, state ); }, 2000 );
        }
        else if( ( state === 'up' ) && ( index > start ) ) { // move up
            index -= 1;
            pane_element.style.top = ( index ) + 'px';
            setTimeout( function( ){ MC.C.movePane( pane_element, start, end, index, state ); }, 1 );
        }
        else if( ( state === 'up' ) && ( index === start ) ) { // all done, return
            console.log('I just returned true');
            return true;
            // document.getElementById( 'po_but_cov' ).style.display='none';
        }
    }
};

1 个答案:

答案 0 :(得分:1)

如果您询问如何从movePane()调用setTimeout()时恢复setTimeout()的返回值,则不能。 setTimeout()没有规定捕获和返回值。但是没关系,因为在回调执行时,调用 MC.C.movePane( pane_element, 0, 0, 0, 'begin', function() { cover_element.style.display = 'none'; }); return o_p; // ... movePane: function( pane_element, start, end, index, state, myCallback ) { // ... else if( ( state === 'up' ) && ( index === start ) ) { // all done, return console.log('I just returned true'); // return true; myCallback(); 的代码不再运行 - 是吗?

如果你想让回调通知它已经完成了某些事情 - 那就抓住你的帽子 - 你将不得不给你的回调一个回调它自己的回调。当回调虽然做了时间延迟的事情时,它可以调用该回调,如果它获得了返回值,它将执行原始代码所做的任何事情。

很抱歉,如果这会让你的头部受伤,但这就是它的运作方式。

它可能看起来像(对不起,如果parens和大括号不匹配)

{{1}}