【发布时间】:2014-09-22 21:39:28
【问题描述】:
我正在尝试从异步函数调用中返回一个值,并且我理解,来自诸如 this 之类的帖子,您不能使用返回。但是,这暗示我应该能够通过正确使用回调和承诺来完成此任务。不幸的是,我很难弄清楚如何处理下面的问题。
在这里,我想返回一个从 AJAX 调用获得的 URL 值。
function getGithubURL(name){
var ghUserURL = 'https://api.github.com/users/bullcitydave?client_id=-----&client_secret=------';
var jsPromise = Promise.resolve($.getJSON(ghUserURL));
var avatar;
jsPromise.then(function(data) {
avatar = data.avatar_url;
console.log(avatar); // I have the correct value here
});
return avatar; // how do I return it correctly?
};
【问题讨论】:
-
你不能那样做......唯一的解决办法是使用回调方法来处理从promise返回的值
-
您可以通过将回调函数传递给
getGithubURL函数来“返回”它,在jsPromise.then内部调用它(并将其传递给data.avatar_url,然后在运行console.log('The URL for my Github image is',x);的回调函数内部调用它 -
@benjamin-gruenbaum - 你真的想将此标记为该问题的重复吗?这个问题的症结在于如何使用promises从他的函数中得到一个ajax结果。您将其标记为 dup 的问题涉及他遇到的异步问题,但对如何使用 Promise 解决问题提供零帮助(请参阅我试图解决该问题的答案)。我决定投票重新开放。您将其标记为重复的问题仅解决了该问题的一部分,而不是我认为更有趣的部分。
-
@bullcitydave - 你不能只同步返回值。您将不得不通过回调函数或承诺返回它(这实际上也只是一个回调,但在一个有用的结构中)。我同意 Benjamin 的观点,如果您仍在尝试从同步函数返回异步值,那么您应该阅读 stackoverflow.com/questions/14220321/…,因为这不是 javascript 可以做的事情。另一种方法是强制异步 ajax 调用是同步的,但这通常是一个糟糕的设计决策。
标签: javascript jquery asynchronous return promise