Javascript 如何在我的每一美元上附加承诺
我在向我的Javascript 如何在我的每一美元上附加承诺,javascript,jquery,promise,Javascript,Jquery,Promise,我在向我的$each循环附加承诺时遇到问题getTemplate是一个异步函数。我想在每个模板中输入所有模板,将它们收集到getAppsTmp变量中,并在下面插入它们。此时,之后的变量为空 var getAppsTmp var promise = $.each(addons, function (i, addon) { if (addon.isApp === true && addon.appLaunchUrl) { console
$each
循环附加承诺时遇到问题getTemplate
是一个异步函数。我想在每个模板中输入所有模板,将它们收集到getAppsTmp
变量中,并在下面插入它们。此时,之后的变量为空
var getAppsTmp
var promise = $.each(addons, function (i, addon) {
if (addon.isApp === true && addon.appLaunchUrl) {
console.log(addon)
var bestIcon = addon.icons.length - 1
getTemplate('app-link', function (tmp) {
getAppsTmp += tmp({
appId: addon.id,
appLaunch: addon.launchType,
appName: addon.shortName,
appUrl: addon.appLaunchUrl,
appIcon: addon.icons[bestIcon].url
})
})
}
})
$.when(promise).then(function () {
$(modalId + ' .content').html(getAppsTmp)
})
如果我这样做,一切都会正常,但我需要一次将它们全部追加:
getTemplate('app-link', function (tmp) {
getAppsTmp = tmp({
appId: addon.id,
appLaunch: addon.launchType,
appName: addon.shortName,
appUrl: addon.appLaunchUrl,
appIcon: addon.icons[bestIcon].url
})
$(modalId + ' .content').append(getAppsTmp)
})
$。每个
返回在第一个参数上传递的数组,而不是承诺
如果我没弄错你的问题,你可能会想这样做
var getAppsTmp = '',
deferreds = [];
$.each(addons, function(i, addon) {
if (addon.isApp === true && addon.appLaunchUrl) {
console.log(addon)
var bestIcon = addon.icons.length - 1,
deferred = $.Deferred();
getTemplate('app-link', function(tmp) {
getAppsTmp += tmp({
appId: addon.id,
appLaunch: addon.launchType,
appName: addon.shortName,
appUrl: addon.appLaunchUrl,
appIcon: addon.icons[bestIcon].url
});
deferred.resolve();
});
deferreds.push(deferred);
}
});
$.when.apply(null, deferreds).then(function () {
$(modalId + ' .content').html(getAppsTmp);
});
上面的代码基本上创建了对象,并将它们存储到一个数组中,用于
插件的每次迭代。然后在getTemplate
完成后解决它。正如供参考的那样,使用本机(或多填充)承诺会使代码(在我看来)更干净-