0

我想做类似以下的事情:

dataservice.doThis(folderIds).then(doThat(setIds));

在哪里doThisdoThat不返回任何东西。我正在阅读有关 Deferred 和 Promise 的内容,但无法使其正常工作。我怎么能告诉doThat在所有内容完成之前不要运行doThis

4

1 回答 1

0

如果您要使用then,您将需要某种承诺系统(即使这意味着您自己重新实现它)。但是,如果没有返回承诺,您将无法做到这一点doThis(并且确实需要使用您需要的 ID 来解决该承诺):

var dataservice = {
    doThis: function doThis(folderIds) {
        var future = new PromiseAPlusCompliantPromise();
        makeXHR("/some/endpoint",  // endpoint
                {folderIds: folderIds},  // data to send
            function sucess(setIds) {  // success handler
                future.resolve(setIds);
        });
        return future;  // Note that we do have to return a promise here
    }
};

function doThat(setIds) {
    // Do whatever here
    // No need to return anything
}

dataservice.doThis([1, 2, 3]).then(doThat);
于 2013-07-23T02:23:06.677 回答