我想要一个脚本文件,仅用于从 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 来包装它。
sendData
和 returnData()
的东西看起来不对。您必须解释并显示更多上下文才能了解具体的推荐内容。
关于Javascript:promise中的.then()没有执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53146975/