如何将WebExtensions通知包装在Promise中?

时间:2018-12-20 13:47:26

标签: promise firefox-addon

通知是可在Firefox WebExtensions代码中用于显示消息的小模式框,类似于“ alert()”。如何将它们包装在Promises中,以便它们有足够的时间出现在屏幕上,然后被自动解雇? (我要回答我自己的问题。)

1 个答案:

答案 0 :(得分:0)

此代码定义了一个函数S(),该函数在屏幕上停留3秒钟的通知框中显示具有给定标题的字符串。该代码返回一个Promise,等待1/2秒,直到该框真正出现。

用法:S('要显示的字符串','通知框的标题')。然后(nextFunction);

// Wrap setTimeout in a Promise
function delay(msec,value)
    {
    return new Promise(function(OKFunction)
        {
        setTimeout(OKFunction,msec,value);
        });
    } // delay

// S: Promise to show string in notification box
// with delays before continuing and before clearing the box
function S(Msg,Title)
    {
    var p=browser.notifications.create({
        "type": "basic",
        "iconUrl": browser.extension.getURL("icons/link-48.png"), // change this as desired
        "title": Title,
        "message": Msg});
    p.then(S1);
    return delay(500); // Wait for notification to appear before continuing
    } // S
function S1(ID)
    {   delay(3000,ID).then(S2).catch(err); } // S1
function S2(ID)
    {   browser.notifications.clear(ID).then(empty).catch(err); } // S2

function empty(valueIgnored)
    {
    console.log('doing nothing');
    } // empty

function err(Msg)
    {
    console.log('*** '+Msg);
    throw Error;
    } // err