我想做类似以下的事情:
dataservice.doThis(folderIds).then(doThat(setIds));
在哪里doThis
,doThat
不返回任何东西。我正在阅读有关 Deferred 和 Promise 的内容,但无法使其正常工作。我怎么能告诉doThat
在所有内容完成之前不要运行doThis
?
我想做类似以下的事情:
dataservice.doThis(folderIds).then(doThat(setIds));
在哪里doThis
,doThat
不返回任何东西。我正在阅读有关 Deferred 和 Promise 的内容,但无法使其正常工作。我怎么能告诉doThat
在所有内容完成之前不要运行doThis
?
如果您要使用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);