【发布时间】:2013-07-13 04:23:23
【问题描述】:
这是我的异步搜索功能。
function searchAsync(searchText) {
return new WinJS.Promise(function (complete) {
if (searchText.length > 2) {
// Asynchronously query the API with the search text
} else {
// Can't return a promise, since 'searchText' is too short
}
});
}
假设调用者没有提供超过 2 个字符的 searchText,我如何告诉他必须提供更长的搜索文本?
我可以返回null...但是由于调用者期望得到一个承诺,我宁愿告诉他不能给出任何承诺。
【问题讨论】:
-
只需通过错误操作立即履行承诺。
-
@dan,对于重复的评论,我深表歉意,我未能解析
fulfill ... with an error action。我会保留wrapError() 的链接并删除其余链接。 -
好吧,当事情好的时候,你会做出承诺。你不能在启动搜索的函数中处理错误,调用第二个参数来调用错误处理程序吗?
-
你只能用延迟/承诺做三件事,(1)什么都不做(让它保持“待定”),(2)解决它,(3)拒绝它。 “Niceness”(如果存在)不是由 Promise 本身的状态变化决定的,而是由任何在 Promise 上调用的
.then()等处理程序所采取的操作决定的。 -
正确的术语是承诺可以“履行”或“拒绝”,其中任何一种都称为“已解决”。避免潜在的混淆表达(例如“用错误操作完成”或当您的意思是“完成”时说“解决”)会很有用。
标签: javascript winjs promise