我是Angular2编程的初学者。我正在尝试编写一个返回自定义承诺的函数。它看起来像这样:
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 执行然后解决或拒绝承诺
为什么我不能使用与上面相同的方法(即使用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
会导致问题?
感谢。
答案 0 :(得分:1)
为什么我需要这样做?上面的方法似乎有效。
你不需要它。你改变了:
return Promise.resolve();
绝对没问题。您使用的代码:
Promise.resolve(value)
是
的别名new Promise((resolve)=>{resolve(value)})
只要您希望执行某些异步工作,就需要new Promise
,然后解决或拒绝承诺。例如,使用setTimeout
:
new Promise((resolve)=>{setTimeout(()=>{resolve(value)}, 1000)})
修改强>
您不需要在此使用Promise.resolve()
:
file.removeFile(file.dataDirectory, item.photo[i])
.then ({success=>return (Promise.resolve(success);},
{error=>return (Promise.reject(error);});
这是相同的:
file.removeFile(file.dataDirectory, item.photo[i])