从承诺中得到回报.用javascript完成
returning something from a promise.done in javascript
我通常在任何异步类型调用的实际。done()函数中完成大部分需要的工作。但在这种情况下,我想返回字符串,因为我需要它在多个地方但这个函数一直返回未定义。该变量超出了异步调用的范围,因此应该可以返回否?
var stringIWantBack = function getTableEditorFieldArray(pageName, tableId) {
var searchString = 'webpagename[name ="' + pageName + '"] > tableid[id ="' + tableId + '"] > editor';
var fieldArray;
$.when(datatableUtility.GetInitStringXml())
.done(function (returnedXml) {
fieldArray = $(returnedXml).find(searchString).text();
return fieldArray;
})
.fail(function (jqXhr, textStatus, errorThrown) {
// alert("Error downloading projection data: " + textStatus + " Error: " + errorThrown);
toastr.warning('Error downloading datatable editor fields array: ' + textStatus + ' Error: ' + errorThrown);
});
}
不能从AJAX(异步)函数返回任何东西。它在后台运行,回调会在将来某个时候被调用当它完成的时候。此时,函数已经返回并完成了。
你可以这样做:
function getTableEditorFieldArray(pageName, tableId) {
var searchString = 'webpagename[name ="' + pageName + '"] > tableid[id ="' + tableId + '"] > editor';
return $.when(datatableUtility.GetInitStringXml()).then(function (returnedXml) {
return $(returnedXml).find(searchString).text();
}).fail(function (jqXhr, textStatus, errorThrown) {
// alert("Error downloading projection data: " + textStatus + " Error: " + errorThrown);
toastr.warning('Error downloading datatable editor fields array: ' + textStatus + ' Error: ' + errorThrown);
});
}
在这里使用.then()
而不是.done()
将允许您操作数据。这里的return
将被发送到稍后附加的任何.done()
方法。
getTableEditorFieldArray('test', 123).done(function(stringIWantBack){
// This will be the value returned from `.then()`
console.log(stringIWantBack);
});
问题不在于范围。你完全正确,你可以从你的getTableEditorFieldArray()
函数返回fieldArray
。
var fieldArray;
$.when(/* ... */ );
return fieldArray;
此时fieldArray
的值是undefined
。$.when()
代码甚至可能不存在,因为它将等待下一个tick(在这个调用堆栈之外)来做任何工作。
必须接受回调以异步返回值。请注意,您可以返回由$.when()
返回的promise,并且多个代码位可以对其调用.done()
。使用.done()
设置的回调函数将按照定义的顺序调用。
相关文章:
- 使用javascript完成清单缓存时发出警报
- 加载网页并在异步JavaScript完成后解析其html
- Backbone.js - CSS更改正在等待JavaScript完成 - 在Firefox中工作,而不是在Chrome
- 通过 JavaScript 完成提交时表单字段不会通过
- 暂停,直到事件/函数使用 jquery 或 JavaScript 完成
- 延迟更改 javascript 函数的时间足够长,以便另一个 JavaScript 完成
- 如何检测表单提交,当它通过JavaScript完成时
- 检测javascript完成以显示/隐藏加载图标
- 计算通过javascript完成的输入类型文本字段
- 检查promise是否已用Javascript完成
- 如何在一半时间使用javascript完成在线考试时显示警告框
- 这个动画可以用javascript完成吗?
- 使用javascript完成vbscript msgbox - Selenium -自动化测试
- 简单的文本信息或图像之前javascript完成在html页面上
- 隐藏WebView直到JavaScript完成
- 如何禁用网页上的所有href ?可以用javascript完成吗?
- 用javascript完成一个递归函数
- 从承诺中得到回报.用javascript完成
- 用javascript完成反向视频
- 如何使用javascript完成函数后获得全局变量值