Методы, которые необходимо вызвать, принадлежащие к библиотеке UI, являются асинхронными. Они полагаются на то, что пользователь выполнит какое-либо действие, прежде чем код сможет продолжить работу. В Javascript это требует либо функции обратного вызова, либо использования async
/ await
с обещаниями. Указанный вами метод c: sketch.UI.getSelectionFromUser
исключен в пользу нового UI.getInputFromUser
метода , как вы можете найти здесь .
Например:
UI.getInputFromUser(
"What's your favorite design tool?",
{
type: UI.INPUT_TYPE.selection,
possibleValues: ['Sketch', 'Paper'],
},
(err, value) => {
if (err) {
// most likely the user canceled the input
return
}
}
)
Таким образом, ваш код будет выглядеть примерно так:
// selected layers via document object per docs
var selection = document.selectedLayers;
// iterate directly over the selection layers
selection.forEach(layer => {
// These shadows are objects, not arrays, so changed [] to {}
var sha_0 = [];
var sha_1 = [{
color: '#00000024',
x: 0,
y: 1,
blur: 1,
spread: 0
}]
var sha_2 = [{
color: '#00036024',
x: 0,
y: 1,
blur: 1,
spread: 0
}]
var options = ['0dp', '1dp', '2dp'];
// Use the newer getInputFromUser method
UI.getInputFromUser(
"Please select shadow depth:",
{
type: UI.INPUT_TYPE.selection,
possibleValues: options,
},
(err, value) => {
if (err) {
// most likely the user canceled the input
return
}
switch (value) {
case options[0]:
layer.style.shadows = sha_0;
break;
case options[1]:
layer.style.shadows = sha_1;
break;
case options[2]:
layer.style.shadows = sha_2;
break;
}
}
)
})
Возможно, ваш код может быть упрощен еще больше, но это должно заставить вас двигаться снова.