【发布时间】:2019-08-08 10:27:08
【问题描述】:
当我对单个 promise 对象有多个 thenable 函数时,它会起作用吗?在这种情况下,我不想嵌套。我想对同一个 promise 对象执行不同的操作。
var a = 0,
t = null,
promiseFun = function () {
return new Ext.Promise(function (resolve, reject) {
t = setInterval(function () {
if (a == 1) {
resolve();
clearInterval(t);
} else if (a == 2) {
reject();
clearInterval(t);
}
}, 1000);
})
};
var promiseObj = promiseFun();
//handler one
promiseObj.then(function () {
console.log('resolved 1')
}, function () {
console.log('rejected 1')
}).then(function () {
console.log('resolved Nest')
}, function () {
console.log('rejected Nest')
});
//handler two- this is valid ?
promiseObj.then(function () {
console.log('resolved 2')
}, function () {
console.log('rejected 2')
});
//OUTPUT:
//resolved 1
//resolved 2
//resolved Nest
或者我需要包裹Deffered。
【问题讨论】:
-
promiseObj.then()需要一个带有参数的函数,这个函数在 Promise 解析时被调用,结果被传递。您似乎正在尝试传递自定义解析/拒绝处理程序;这不是模式的工作方式。第二个函数应该进入.catch() -
@ChrisG -
.then()最多支持两个作为参数传递的函数。第二个函数(如果存在)是拒绝处理程序。大多数人使用.catch()来代替,但也有一些用例将第二个函数用于.then()。 -
@ChrisG -
promiseObj.then() expects a single function不,0、1 或 2 个参数是有效的(是 0)......第二个被“拒绝”......另外,你可以把任何东西作为参数,非函数被视为不存在......这就是.then(null, onrejectedFn)==.catch(onrejectedFn) -
@jfriend00 和 Jaromanda X,我明白了,我应该在“纠正”人之前查一下 :)
-
我似乎记得
.then(null, onresolved)是出于某种原因在旧 Internet Explorer 中实现承诺的唯一方法......不喜欢.catch或其他东西 - 不记得了,但在我的自己的 Promise 实现,catch写成Promise.prototype.catch = function (onRejected) { return this.then(null, onRejected); };
标签: javascript extjs promise