Javascript:promise中的.then()没有执行?

标签 javascript jquery asynchronous promise

我想要一个脚本文件,仅用于从 URL 访问 JSON。我想要一种方法将脚本中的 JSON 对象返回到单独脚本文件中的 var 中,然后进行相应的修改。显然,由于 javascript 是异步的,如果我只是将其写出来,它就会失败。因此我必须使用一个 promise :

var promise1 = new Promise(function(resolve, reject) {
  access(userSearchText); //send user input to get appropriate JSON object
});

promise1.then(function(value) {
  var getData = returnData();     //method that returns JSON object from the other script
  alert(getData);                 //print out the returned JSON object
  console.log("we have finished");
});

但这并没有打印出任何东西。警报根本没有发生,并且控制台中没有打印任何内容。我正在使用 jquery 访问其他脚本中的 url,并且在脚本中访问它后我有一个 .done 用于检索 JSON:access.js

var sendData;

(function() {

        jqxhr = $.getJSON( url, {

        })
        .done(function( data ) {
            sendData = data;

    });
})();

function returnData(){
    return sendData;
}

因此,由于 .done 的原因,访问 URL 的脚本中不应该出现任何异步问题。我真的不明白为什么这不起作用。我检查了我的页面,没有发现任何错误。有人可以帮忙吗?

最佳答案

promise1 永远不会得到解决。

promise1 的定义中,您从未调用 resolve() 函数来解析它。因此,.then() 永远不会被调用。

只有在执行器函数中显式调用 resolve() 时,手动创建的 Promise 才会得到解析。

如果 access() 本身是异步的,那么我们将需要更多有关该函数的信息来帮助您正确执行此操作。笼罩在它周围的 promise 对你没有任何帮助。如果 access() 本身返回一个 Promise,那么您应该只使用该 Promise,而不是对其进行包装。

<小时/>

可能 access() 应该返回一个 promise ,该 promise 在异步操作完成时得到解决,然后您可以执行以下操作:

access().then(...).catch(...);

并且,不要用另一个 promise 来包装它。

sendDatareturnData() 的东西看起来不对。您必须解释并显示更多上下文才能了解具体的推荐内容。

关于Javascript:promise中的.then()没有执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53146975/

相关文章:

javascript - 如何将组件数据绑定(bind)到 prop 中的值

javascript - Bootstrap可折叠导航不折叠

javascript - 每当触发鼠标悬停时更改 CSS 填充属性的优雅方法?

JavaScript : Different behavior when run on machine and local server

javascript - Node.js 异步任务是同步处理的吗?

C# Tcp 通信线程池与异步调用

javascript - 在 main.js 文件中使用 getScript 来减少加载大小

jquery - 我们可以将 jQuery 引用添加到 web.config 文件中,而不是将其添加到每个 asp.net 页面吗?

javascript - 如何根据名称升序和降序对列进行排序

ios - 从 Swift 函数中的异步调用返回数据