工具:JavaScript ES6
我还没有看到关于按顺序执行链接多个 promise 的语法的简洁的答案。我认为这对于所有有前途的新手来说都是棺材问题的一个很好的钉子。 :)
我的问题是我想以同步顺序调用它 getPosts--->getThreads--->initializeComplete()
这就是我正在做的事情。
userPromise.then(getPostsPromise).then(getThreadsPromise).then(initializeComplete());
以下是链中 promise 之一的示例:
var getPostsPromise = function(){
//Firebase is just a simple server I'm using
var firebasePostsRef = new Firebase("https://myfburl.firebaseio.com/posts");
var postsRef = firebasePostsRef.child(localPlace.key);
return new Promise(function(resolve, reject) {
//Below is a Firebase listener that is called when data is returned
postsRef.once('value', function(snap,prevChild) {
var posts = snap.val();
AnotherFile.receiveAllPosts(posts);
resolve(posts);
});
});
}
但是
initializeComplete()
在 getPostsPromise
和 getThreadsPromise
有机会完成获取之前被调用。为什么会发生这种情况,我如何编写要按顺序执行的 promise ?
最佳答案
initializeComplete 立即被调用,因为您在将它传递给 then
时正在调用它。你必须省略括号,就像你对 getPostsPromise
和 getThreadsPromise
所做的一样
userPromise.then(getPostsPromise).then(getThreadsPromise).then(initializeComplete);
关于JavaScript 链式 Promise : Calling next promise before previous has finished,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33469962/