【发布时间】:2015-06-21 21:20:04
【问题描述】:
我已承诺 fbgraph nodeJS API 并正在使用它来测试功能。此功能发布到给定的 Facebook 群组,然后验证帖子是否已正确通过并删除该帖子。这段代码的目的是测试用户是否拥有不同组数组的发布权限。
当前使用 Bluebird 的 Promise 库和生成器实现的代码。
var examplePostId = 12345678910
facebookPoster = Promise.coroutine(function* (feedId) {
var postResponse = yield graph.postAsync(feedId + '/feed', sampleData);
var postId = postResponse.id
var getResponse = yield graph.getAsync(postId)
var returnedId = getResponse.id
var postedSuccessfully = true // <-- This is what I want to reference in my error handler.
var deleteResponse = yield graph.delAsync(postId)
var getAfterDeleteResponse = yield graph.getAsync(postId) // I expect this to throw an error since the post should already be deleted
return postId
})
facebookPoster(examplePostId).then(function(postId){
console.log(postId);
}).catch(function(err){
console.log(err); // How can I tell the handler that error is fine because postedSuccessfully is true?
})
这是我的问题:FB 的 Graph API 非常不可靠。即使帖子实际上没有被删除,我仍然会收到成功响应(记录在此处:___)。
因此,在我的生成器中,我试图第二次获取 postID 的信息,并期望它会爆炸。当我确实收到错误时,它会传递给我的处理程序并触发我的处理程序。这很好,但我希望能够引用 postedSuccessfully 布尔值来区分我期望收到的错误和意外的错误。
我如何引用 postedSuccessfully 布尔值,或实施另一种优雅的方式来区分收到的错误?
【问题讨论】:
-
我不太明白。该布尔值似乎总是
true。您究竟想在不真实的地方捕捉到什么? -
How do I access previous promise results in a .then() chain? 可能重复,但我会尝试给出具体答案
-
例如,如果第一个 getAsync 调用返回错误,它将把它传递给处理程序,此时,如果我有条件地在处理程序中检查 postedSuccessfully 的值,处理程序可以知道在进行 delAsync 调用之前收到此错误。但是,如果处理程序可以检查 postedSuccessfully 的值并看到它是真的,它就知道帖子已成功通过,并可以告诉我有发布帖子的权限。让我知道这是否有意义。
-
顺便说一句,我很抱歉,但我已经删除了第二个接听电话!我现在已经将它添加到代码中,希望它现在更有意义,我的错!
-
啊,是的,现在我认为我的回答也有道理:-)
标签: javascript node.js promise generator bluebird