myPromise
, который вы нажимаете на myList
, создается после запуска конструктора Promise. Итак, на первой итерации myPromise
равно undefined
(а на последующих итерациях последняя myPromise
помещается в массив).
Создайте Обещание, а затем немедленно нажмите на массив в той же итерации:
var myList = [];
for (let i = 1; i <= 20; i++) {
var myPromise = new Promise(function(resolve, reject) {
resolve("ITEM " + i);
});
myList.push(myPromise);
}
Promise.all(myList).then(function(values) {
console.log(values);
});
console.log("End");
Может быть понятнее, если вы вручную поднимите myPromise
(чтобы код был ближе к тому, как его выполняет интерпретатор):
var myPromise;
var myList = [];
for (let i = 1; i <= 20; i++) {
myPromise = new Promise(function(resolve, reject) {
resolve("ITEM " + i);
});
myList.push(myPromise);
}
Promise.all(myList).then(function(values) {
console.log(values);
});
console.log("End");
Excel распознает это поле как текст, потому что Вы производите пустую строку каждый раз, когда поле 0.
Вы могли попробовать это, для вывода нулевого значения вместо пустой строки:
=IIf(Fields!PERIOD02_VALUE.Value <> 0,Fields!PERIOD02_VALUE.Value, Nothing)
Это, как гарантируют, не будет работать, однако, поскольку я, кажется, помню, что Excel предполагает, что поле является типом того, что находится в первой строке данных.
У меня возникла эта проблема. Некоторые ячейки будут текстовыми, а другие - числами - все с одинаковой строкой форматирования. Решение состоит в том, чтобы умножить выражение вашей ячейки на 1.000 (1 не работает!) - это заставляет SSRS форматировать ячейку как число. например; (здесь ваше выражение) * 1.000