我对JS还是陌生的,我试图了解npm软件包中的文档。该文档是:
client.projects.get(); // Promise
我已经阅读了有关Promises的一些文档,但是我仍然不确定如何调用它并使它返回我期望的结果。
程序包在这里供参考:https://github.com/markmssd/bitbucket-server-nodejs
答案 0 :(得分:2)
Promise
是代码的异步执行。
您可以在Promise上使用.then
方法从该异步代码返回值。您将必须传递处理返回值的回调函数。
client.projects.get().then(function(foo) {
// this foo is returned from client.projects.get() async operation
})
万一异步操作引发异常,您可以在承诺中使用.catch
捕获那些异常。
client.projects.get().then(function(foo) {
// this foo is returned from client.projects.get() async operation
}).catch(function(err) {
// something went wrong while executing client.projects.get()
})
答案 1 :(得分:2)
client.projects.get();
将返回promise,而不可能返回“您的期望”。
您应该做的就是这样称呼它:
client.projects.get().then((result) => {
// do with `result` your logic
console.log(result);
});
,然后在作为参数传递给then
函数的回调中,接收响应提供的result
并根据您的逻辑使用它。
答案 2 :(得分:1)
玩:
client.projects.get().then(result => console.log(result))
您会注意到,在兑现承诺时,一旦准备好,您将需要指定如何处理其结果。
仅返回结果的替代方法是:
client.projects.get().then(res => res)
如果有错误,您还需要添加一个捕获:
client.projects.get().then(res => res).catch(err => console.error(err))
如果出现故障或某种故障,它将注销一个错误。
答案 3 :(得分:1)
Promise对象表示一个值,该值可能尚不可用,但将来会被解析。它允许您以更同步的方式编写异步代码。一旦承诺解决,您就可以得到结果,或者在承诺被拒绝(失败)的情况下捕获错误。在您的情况下,您必须像这样调用函数:
client.projects.get().then(function(result){
console.log(result);
}).catch(function(err) {
// handle error
console.log("something went wrong",err);
});
或者,您也可以将promise存储到从函数调用返回的变量中并获取结果,如下所示:
var promise = client.projects.get();
promise.then(function(result){
console.log(result);
}).catch(function(err) {
// handle error
console.log("something went wrong",err);
});
将已分配的Promise到变量中可能不是一个好选择,但是当有多个函数返回Promise并且我们希望在所有Promise都解决后执行一些代码时,这将非常有用。像这样:
var p1 = asyncFunction1();
var p2 = asyncFunction2();
Promise.all([p1,p2]).then(function(results){
// do something with results
});
答案 4 :(得分:0)
已完成 -如果实现了承诺,则会调用该函数。
onRejected (可选) -如果Promise被拒绝,则调用一个函数。
p.then(function(value) { // fulfillment }, function(reason) { // rejection });
p.then(function(data) { console.log("Play with your data.") }) .catch(function(error) { console.log(error); }) .finally(function() { console.log("Something need to do, no matters fail or sucess") });
更多details。
因此,您可以编写如下代码:
client.projects.get().then(function(value) {
// fulfillment
}, function(reason) {
// rejection
});
或
client.projects.get()
.then(function(data) { console.log("Play with your data.") })
.catch(function(error) { console.log(error); })
.finally(function() { console.log("Finally do something.") });