我是Angular2編程的初學者。我正在嘗試編寫一個返回自定義承諾的函數。它看起來像這樣:在Angular中解析定製承諾(2-4) - 是否新增
removeItem(item, removeFile: boolean = true): Promise <any> {
// remove the item from the list
let index = this.items.indexOf(item);
if (index > -1) { this.items.splice(index, 1); }
// now if removeFile is true, also physical remove the image
if (removeFile) {
// file.removeFile is basically cordova's file removeFile that returns a promise
return file.removeFile(file.dataDirectory, item.photo[i]);
}
else { // return my own promise so its consistent
return Promise.resolve(); //<---- *THIS*
}
}
我有這個問題是行註釋爲*THIS*
在底部。我見過的每個例子都有一個var p = new Promise(resolve, reject)
(one許多例子)。
問題:
1)爲什麼我需要這樣做?上面的方法似乎工作。我讀this SO thread,它回答了另一個承諾框架,但我無法繞過它。任何人都可以爲我解析嗎?
2)如果我必須做一個p = new Promise
,我不想把我的全部功能都包含在它的函數中,就像例子顯示的那樣。我可以在需要的地方做一個返回p.resolve()和p.reject(),所以我不添加到嵌套中?
3)潛水多一點成什麼@Maximus說:
你需要一個新的承諾,只要有你想 一些異步工作完成,然後要麼解決或拒絕承諾
爲什麼我不能使用相同的方法和上面(即使用Promise.resolve/reject)
?舉例來說,可以說我逼上file.removeFile
定製的承諾(我知道這是不好的,但我只是想了解爲什麼我需要異步工作的新承諾)
if (removeFile) {
file.removeFile(file.dataDirectory, item.photo[i])
.then ({success=>return (Promise.resolve(success);},
{error=>return (Promise.reject(error);});
}
編輯:爲了澄清,我非常清楚,我不需要用我自己的承諾來包裝removeFile。這只是舉一個例子,用我自己的承諾來包裝一個異步作業,但不使用new Promise
。 換句話說,我可以從一個異步作業的例子中學習,這個例子需要我做一個new Promise
和Promise.resolve
會導致問題嗎?
謝謝。
Thanks Maximus。我編輯了我的原始問題,以便爲即使異步工作爲什麼需要新的承諾添加進一步的問題 – user1361529
@ user1361529,您可能必須瞭解許諾如何工作。我在你的更新中添加了關於我的答案的細節。 –
@Maximus如果你提供了一些鏈接來了解承諾是如何工作的,那麼這將是非常棒的。 – yurzui