首先你需要了解 Promises 的基础知识。
让我们从非常基础的开始——
新创建的 es6 Promise 处于以下状态之一:
让我们创建一个示例 Promise
var promise = new Promise(function(fulfill, reject) {
// Do some stuff and either fullfill or reject the promise
});
所以上面的 Promise 接收到一个回调函数,也称为executor函数,带有签名function(fullfill, reject)
。
新创建的 Promise 还有一个非常重要的属性函数,称为then
用于链接和控制逻辑流。
then
接受两个可选的回调参数onFulfilled
和onRejected
.
在这个executor函数中,有两件事恰好表明了 promise 的结果——
fullfill
方法在有或没有值的情况下被调用:
表示操作成功完成。如果你用一个值调用完成,那么回调将接收该值,如果你决定在调用中不提供一个值,那么将用一个参数调用。onFulfilled
then
fulfill
onFulfilled
undefined
var promise = new Promise(function(fulfill, reject) {
// lets assume operation completed successfully
fulfill('Success');
});
promise.then(onFulfilled, onRejected);
function onFulfilled(result) {
console.log(result);
// Success will be printed
}
reject
方法在有或没有值的情况下被调用:
执行操作时发生了一些问题。您可以决定是否传递一些错误消息reject
回调以指示最终用户发生的错误。
var promise = new Promise(function(fulfill, reject) {
// lets assume operation did not complete successfully
reject(new Error('Error'));
});
promise.then(onFulfilled, onRejected);
function onRejected(error) {
console.log(error.message);
// Error message will be printed
}
现在让我们谈谈Promise.resolve
.
在顶部,您学习了如何通过构造函数创建 Promise。
var promise = new Promise(function (fulfill, reject) {
fulfill('Success value');
});
// Now: Promise.resolve
// Exactly does the same thing as above code
var promise = Promise.resolve('Success value');
同样来了Promise.reject
——
var promise = new Promise(function (fulfill, reject) {
reject(new Error('Error VALUE'));
});
var promise = Promise.reject(new Error('Error VALUE'));
在您的情况下save
,似乎已经在内部返回了一个承诺,该承诺可能正在调用其中一个fulfill
或reject
方法,因此您不需要调用Promise.resolve()
. 您只需要在方法中获取该承诺返回的fulfilled
值或rejected
值即可then
。
saveData : function() {
this.$.document.data = this.$.message.value;
// return this promise
return this.$.document.save("/parent", "child");
}
saveData()
.then(function() {
console.log('sent the event!!!!!!');
this.$.document.reset();
}.bind(this));
我希望它能让关于 Promise 的事情更加清晰。