gpt4 book ai didi

JavaScript 链接 promise : Calling next promise before previous has finished

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:02:15 25 4
gpt4 key购买 nike

工具:JavaScript ES6

关于链接多个 promise 以按顺序执行的语法,我还没有看到一个好的简洁答案。我认为这对于所有有前途的新手来说都是解决棺材问题的好办法。 :)

我的问题是我想以同步顺序调用它 getPosts--->getThreads--->initializeComplete()

这是我正在做的。

userPromise.then(getPostsPromise).then(getThreadsPromise).then(initializeComplete());
  • userPromise是我从另一部分代码返回的Promise obj
  • getPostsPromise 返回一个 Promise 并向服务器获取帖子
  • getThreadsPromise 返回一个 Promise 并向服务器获取线程
  • 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()getPostsPromisegetThreadsPromise 有机会完成抓取之前被调用。

为什么会这样?我该如何编写按顺序执行的 promise ?

最佳答案

initializeComplete 立即被调用,因为您在将它传递给 then 时调用它。您必须省略括号,就像您对 getPostsPromisegetThreadsPromise

所做的一样
userPromise.then(getPostsPromise).then(getThreadsPromise).then(initializeComplete);

关于JavaScript 链接 promise : Calling next promise before previous has finished,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33469962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com