从 Bluebird Promise 对象访问 jQuery $.get URL
Acces to jQuery $.get URL from Bluebird Promise object
我将 Bluebird promises 与 jQuery $.get()
一起使用,如下所示:
var p = Promise.resolve($.get(url.address, url.options, 'json')).then(function (result) {...
并处理它们:
p.timeout(100).catch(Promise.TimeoutError, function (error) {
console.log(p); // here I want to log in that Promise took too long to execute and access what user actually asked for
});
如何在上面的 catch 块中使用选项访问 $.get URL?请参阅代码中的注释 - 当我超时时,我需要知道用户在他的请求中要求什么。
提供的示例已简化,我将 Promise 传递给另一个函数并在其中访问它;我得到的是:
Promise {
_bitField: 201326593,
_cancellationParent: undefined,
_fulfillmentHandler0: undefined,
_progressHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_rejectionHandler0: undefined,
_settledValue: SubError,
__proto__: Promise
}
我不是在问如何在本质上获得 $.get()
url 而是如何在 Bluebird 承诺的范围内获得它。
你不应该直接访问 promise 对象,让框架来处理它。如果你想传递参数,你可以 return 一个 promise 中的参数值(但它只会在下一个 then 中保留)或者你可以使用 promise 的范围:
https://github.com/petkaantonov/bluebird/blob/master/API.md#binddynamic-thisarg---promise
var result = Promise.bind({url: url})
.then(function(){
return Promise.resolve($.get(url.address, url.options, 'json'));
}
.then(function() {
// access your url in then
console.log('then: ', this.url);
return Promise.reject();
})
.catch(function(err) {
// access your url in catch
console.log('catch: ', this.url);
});
我将 Bluebird promises 与 jQuery $.get()
一起使用,如下所示:
var p = Promise.resolve($.get(url.address, url.options, 'json')).then(function (result) {...
并处理它们:
p.timeout(100).catch(Promise.TimeoutError, function (error) {
console.log(p); // here I want to log in that Promise took too long to execute and access what user actually asked for
});
如何在上面的 catch 块中使用选项访问 $.get URL?请参阅代码中的注释 - 当我超时时,我需要知道用户在他的请求中要求什么。
提供的示例已简化,我将 Promise 传递给另一个函数并在其中访问它;我得到的是:
Promise {
_bitField: 201326593,
_cancellationParent: undefined,
_fulfillmentHandler0: undefined,
_progressHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_rejectionHandler0: undefined,
_settledValue: SubError,
__proto__: Promise
}
我不是在问如何在本质上获得 $.get()
url 而是如何在 Bluebird 承诺的范围内获得它。
你不应该直接访问 promise 对象,让框架来处理它。如果你想传递参数,你可以 return 一个 promise 中的参数值(但它只会在下一个 then 中保留)或者你可以使用 promise 的范围: https://github.com/petkaantonov/bluebird/blob/master/API.md#binddynamic-thisarg---promise
var result = Promise.bind({url: url})
.then(function(){
return Promise.resolve($.get(url.address, url.options, 'json'));
}
.then(function() {
// access your url in then
console.log('then: ', this.url);
return Promise.reject();
})
.catch(function(err) {
// access your url in catch
console.log('catch: ', this.url);
});