Nic*_*eda 3 javascript promise ecmascript-6 es6-promise
工具:JavaScript ES6
我还没有看到关于链接多个promises以按顺序执行的语法的简洁答案.我认为这对于所有承诺新手的棺材问题都是一个很好的指甲.:)
我的问题是我想以同步顺序调用它 getPosts--->getThreads--->initializeComplete()
这就是我在做的事情.
userPromise.then(getPostsPromise).then(getThreadsPromise).then(initializeComplete());
Run Code Online (Sandbox Code Playgroud)
以下是链中一个承诺的示例:
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);
});
});
}
Run Code Online (Sandbox Code Playgroud)
但是initializeComplete()之前被召唤getPostsPromise并getThreadsPromise有机会完成抓取.
为什么会发生这种情况?如何编写承诺以按顺序执行?
initializeComplete正在被调用,因为你在传递它时正在调用它then.你必须省略括号,就像你一样的getPostsPromise和getThreadsPromise
userPromise.then(getPostsPromise).then(getThreadsPromise).then(initializeComplete);
Run Code Online (Sandbox Code Playgroud)