首先,您需要了解Promise的基礎知識。
允許用戶從基礎做起 -
新創建的ES6承諾在下列狀態之一:
讓我們創建一個示例Promise
var promise = new Promise(function(fulfill, reject) {
// Do some stuff and either fullfill or reject the promise
});
所以上述承諾收到回調函數也被稱爲執行函數簽名function(fullfill, reject)
。
新創建的promise還有一個非常重要的屬性函數,稱爲then
,用於鏈接和控制邏輯流。
then
需要兩個可選的回調參數onFulfilled
和onRejected
。
這裏面執行功能兩件事情恰好說明承諾的結果 -
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
,或then
方法中的值爲rejected
。
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));
我希望它使有關承諾的事情更清晰。
除了你所問,你似乎也有一個範圍問題。外部函數和內部函數中的'this'可能會有所不同,並且'this。$。document.reset();'可能會拋出。 –
@ Roamer-1888 - 這就是爲什麼有'.bind(this)'。 – jfriend00
哎呀,高級時刻!感謝您發現@ jfriend00。 –