我通过量角器和javascript中的所有异步调用获得了它。过去需要2行代码的内容现在需要10.这里是一个例子:
我正在编写一个量角器实用程序方法来简单地检查一组相关div和输入文本框中的某些DOM属性。这是我正在研究的验证框架。我们的想法是将一个量角器元素传递给此方法,然后根据该元素的id检查相关div和输入文本框中的某些DOM属性。这就是我开始工作的方式:
/**
* Checks for error in a NUAF field
* @param {String or Element} field .
* @param {string} errorText expected validation error text to appear in tooltip
*/
exports.checkForError = function (field, errorText) {
var innerCheck = function(fieldId) {
expect(fieldId).not.toBe(undefined);
var elmntd = element(by.id('divInput.'+fieldId));
expect(elmntd).not.toBe(null);
expect(elmntd.getAttribute('tooltip')).toContain(errorText);
expect(exports.hasClass(element(by.id('prnt.'+fieldId)), 'has-error')).toBe(true);
};
// this unbelievably complex block of code gets the id of the
// field argument. If string was passed, the fieldid is just that .
if (typeof field === 'string') {
innerCheck(field);
} else {
//what used to be field.id now needs 6 lines of code?
field.getAttribute('id').then(
function(idAttribute) {
console.log( "*********: "+idAttribute );
innerCheck(idAttribute);
}
);
}
};
问题是:编写field.getAttribute('id').then
代码块是否有更好,更简洁的方法。写这一切只是为了得到元素的Id而感到遗憾。
答案 0 :(得分:4)
这对于异步代码来说并不是那么冗长...特别是如果你考虑到你可以直接将函数innerCheck
传递给一个承诺:
// this unbelievably complex block of code gets the id of the
// field argument. If string was passed, the fieldid is just that .
if (typeof field === 'string') {
innerCheck(field);
} else {
field.getAttribute('id').then(innerCheck);
}
应该那么简单