【问题标题】:Telling the caller of a function 'nicely' that a promise can't be met很好地告诉函数的调用者无法满足承诺
【发布时间】: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


【解决方案1】:

添加一个错误处理程序并在 Promise 处于错误状态时调用它。

function searchAsync(searchText) {
    return new WinJS.Promise(function (complete, error) {
        if (searchText.length > 2) {
            // Asynchronously query the API with the search text
            complete(results);
        } else {
            // Can't return a promise, since 'searchText' is too short
            error();
        }
    });
}

【讨论】:

    猜你喜欢
    • 2019-12-27
    • 2017-08-12
    • 1970-01-01
    • 2018-05-18
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2011-03-27
    相关资源
    最近更新 更多